我在互联网上看到了这一点,我想不出这是什么:
他们创建了名为障碍的布尔值并将其设置为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:是的;
谢谢..抱歉这个新手问题。
答案 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
中的任何值,因此true
为false
。
因此,此处variable
的第一个值将分配给您的value
{{1}}。