这个变量是什么意思?

时间:2013-11-24 08:26:06

标签: c#

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

他们创建了名为障碍的布尔值并将其设置为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功能,当有障碍物时,将材料转换为指定的颜色,或者如果没有障碍物,将材料变成白色。但是,这条线是什么:障碍=障碍? false:是的;

谢谢..抱歉这个新手问题。

5 个答案:

答案 0 :(得分:5)

?:这称为ternary operator

  

条件运算符(?:)根据需要返回两个值中的一个   布尔表达式的值。以下是该语法   条件运算符。

     

条件? first_expression:second_expression;

     

<强>说明

     

条件必须评估为真或假。如果条件为真,   first_expression被评估并成为结果。如果条件是   false,second_expression被评估并成为结果。只有一个   评估两个表达式。

     

first_expression和second_expression的类型必须是   相同,或者必须存在从一种类型到另一种类型的隐式转换。

来自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";

正如Steeve正确指出的那样,你可以尝试使用if else语句来完成你想要完成的事情:

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

else
{
    transform.renderer.material.color = Color.white;
    obstacles = false;
}

答案 1 :(得分:4)

所有答案都解释了什么是三元运算符,他们没事,但每个人都没有注意到房间里的大象。为什么不删除三元运算符并将上面的代码写为

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;
}

答案 2 :(得分:2)

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

答案 3 :(得分:1)

这是三元运营商。基本上,如果condition为true,则执行first语句,否则执行第二个语句。

条件? first_expression:second_expression;

http://msdn.microsoft.com/en-us/library/ty67wk28(v=vs.110).aspx

答案 4 :(得分:1)

?: 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;

输出:value=false

expression => (obstacles = obstacles)始终评估obstacles中的任何值,因此truefalse。 因此,此处variable的第一个值将分配给您的value {{1}}。