C# 这个变量意味着什么?

C# 这个变量意味着什么?,c#,C#,我在互联网上看到了这一点,我想不出这是怎么回事: 他们创建了名为“障碍物”的布尔值,并将其设置为false public bool obstacles = false; 但是,这句话是关于什么的: obstacles = obstacles ? false : true; if (obstacles) { transform.renderer.material.color = new Color(.5f, .5f, 0.0f); }

我在互联网上看到了这一点,我想不出这是怎么回事:

他们创建了名为“障碍物”的布尔值,并将其设置为false

   public bool obstacles = false;
但是,这句话是关于什么的:

    obstacles = obstacles ? false : true;

    if (obstacles)
    {
        transform.renderer.material.color = new Color(.5f, .5f, 0.0f);
    }

    else
    {
        transform.renderer.material.color = Color.white;
    }
我知道if和else功能,当有障碍物时,将材质转换为指定的颜色,或者如果没有障碍物,将材质转换为白色。但是,这条线是关于什么的:障碍=障碍?假:真


谢谢。。很抱歉这个新问题。

这是三元运算符。基本上,如果条件为true,则执行第一条语句,否则执行第二条语句

状况?第一个表达式:第二个表达式

?:这被称为

条件运算符?:返回两个值中的一个,具体取决于 布尔表达式的值。下面是 条件运算符

状况?第一个表达式:第二个表达式

评论

条件的计算结果必须为true或false。如果条件为真, 对第一个表达式求值并成为结果。如果条件是 false,第二个_表达式被计算并成为结果。只有一个 计算这两个表达式中的一个

第一个_表达式和第二个_表达式的类型必须是 相同,或者必须存在从一种类型到另一种类型的隐式转换

MSDN中的示例表明:

int input = Convert.ToInt32(Console.ReadLine());
string classify;

// if-else construction.
if (input < 0)
    classify = "negative";
else
    classify = "positive";

// ?: conditional operator.
classify = (input < 0) ? "negative" : "positive";

这条线基本上将障碍物变量的值翻转为相反的值。如果障碍为真,它会将其值更改为假,反之亦然。因此,这段代码的作者可能正试图在这里绘制类似于交错模式的东西

?: called ternary operator
功能:

var value= (Condition/Expression)? value1 :value2;
意味着

if(Condition== true)
value=value1;
else
value=value2;
您的代码:

public static bool obstacles = true;
bool value=(obstacles = obstacles) ? false : true;
输出:值=false

您的表达式=>障碍=障碍始终计算为障碍中的任何值,因此这里是真的。
因此,这里的第一个值false将分配给变量值。

所有答案都解释了什么是三元运算符,它们都是正确的,但每个人都没有注意到房间里的大象。为什么不删除三元运算符并按如下方式编写上述代码

if (!obstacles)
{
    // Enter the if with obstacles = false, but execute the code for true then flip obstacles
    transform.renderer.material.color = new Color(.5f, .5f, 0.0f);
    obstacles = true;
}

else
{
    // Enter the else with obstacles = true, but execute the code for false then flip obstacles
    transform.renderer.material.color = Color.white;
    obstacles = false;
}

我宁愿写障碍=!“障碍,或者按照史蒂夫的方法去做,但现在你知道这意味着什么了。”西尔弗明,也许是你的better@Silvermind当前位置如果我想接受你的建议。该代码将类似于if语句将执行障碍或barriends=true,else语句将执行!障碍或障碍=错误。先生,我在某些方面错了吗?是的,现在我已经知道了。感谢你和每个人的眼睛,你是对的,但如果你能,我会在HasBarriends中重命名障碍,这样当你写IfHasBarriends trueCondition或者FalseCondition时,它更可读,非常感谢!我现在明白了为什么不简单的障碍=!障碍?@SimonWhitehead,因为我没有想到它:-见上面Silvermind的评论。
if (!obstacles)
{
    // Enter the if with obstacles = false, but execute the code for true then flip obstacles
    transform.renderer.material.color = new Color(.5f, .5f, 0.0f);
    obstacles = true;
}

else
{
    // Enter the else with obstacles = true, but execute the code for false then flip obstacles
    transform.renderer.material.color = Color.white;
    obstacles = false;
}