这里,优先级最高的运算符出现在表格的顶部,优先级最低的运算符出现在表格的底部。在表达式中,优先级更高的运算符将首先被求值。
逻辑或||从左到右
视情况而定:从右到左
示例:
if ( true || false ? false : true )
{
Console.WriteLine(String.Format("WHY?"));
}
我怎么看:true || (false ? false : true)
我认为它在我的情况下如何工作:(true || false) ? false : true
为什么条件OR的优先级高于ternary运算符,为什么不满足条件?
最简单的诊断方法是检查其编译方式。
if ( true || false ? false : true )
{
Console.WriteLine(string.Format("first"));
}
if ( true || (false ? false : true) )
{
Console.WriteLine(string.Format("second"));
}
if ( (true || false) ? false : true )
{
Console.WriteLine(string.Format("third"));
}
将被编译为:
Console.WriteLine(string.Format("second"));
现在进行诊断。运算符||
和运算符?
具有相同的优先级。在数学上喜欢+和-。因此,它们从左到右进行评估。并且true || false ? false : true
与(true || false) ? false : true
您已经写过,||
的优先级高于?:
。这意味着
true || false
将首先进行评估,并且始终得出true
。因此,您的三元有效地变为
true ? false : true
并且将始终产生false
。