逻辑或和三进制运算符评估顺序

问题描述 投票:0回答:2

这里,优先级最高的运算符出现在表格的顶部,优先级最低的运算符出现在表格的底部。在表达式中,优先级更高的运算符将首先被求值。

逻辑或||从左到右

视情况而定:从右到左

示例:

if ( true || false ? false : true )
{
     Console.WriteLine(String.Format("WHY?"));
}

我怎么看:true || (false ? false : true)

我认为它在我的情况下如何工作:(true || false) ? false : true

为什么条件OR的优先级高于ternary运算符,为什么不满足条件?

c# operator-precedence
2个回答
0
投票

最简单的诊断方法是检查其编译方式。

        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"));

您可以在以下位置检查它:https://sharplab.io/#v2:EYLgxg9gTgpgtADwGwBYA+ABATARgLABQGAzAATakDCpA3oaQ+WRiqQLIAUAlLfY/wEsAZqQ6kALlACuMUmjSkhAQwA2AZ1kB+Rao2kQE6bK59+DOgTNWGGHAE4OtgAwA6AGLQAtkvEcAREICUGriflxcANymZgC+0YIiYpIycgocyupaOpn6hjI8JpbWFtZWtg7O7l4+/hqQAHYAJmGR8YxxRVZtDMKiosmy8tkaPNoZegYDpIWlJaX85Y44rh5Q3r5+4gAWQc3hUZ2x3aTRHTFAA==

现在进行诊断。运算符||和运算符?具有相同的优先级。在数学上喜欢+和-。因此,它们从左到右进行评估。并且true || false ? false : true(true || false) ? false : true


0
投票

您已经写过,||的优先级高于?:。这意味着

true || false

将首先进行评估,并且始终得出true。因此,您的三元有效地变为

true ? false : true

并且将始终产生false

© www.soinside.com 2019 - 2024. All rights reserved.