多个三元运算符并将int评估为布尔神秘

时间:2015-11-11 14:19:39

标签: c# int boolean ternary-operator

int cow;
int cow = true ? false ? false ? false ? 3 : 4 : 5 : 6 : 7;

这个三元运算符如何工作?

为什么它会给我结果呢?

人们已经清楚地理解了所要求的内容。请给我更多减去声望。

3 个答案:

答案 0 :(得分:3)

C#三元运算符是if语句的语法糖。

  

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

https://msdn.microsoft.com/en-us/library/ty67wk28.aspx?f=255&MSPPError=-2147217396

这是不使用三元组的等效代码。它将始终落入牛= 6区块。

        if (true)
        {
            if (false)
            {
                if (false)
                {
                    if (false)
                    {
                        cow = 3;
                    }
                    else
                    {
                        cow = 4;
                    }
                }
                else
                {
                    cow = 5;
                }
            }
            else
            {
                cow = 6;
            }
        }
        else
        {
            cow = 7;
        }

答案 1 :(得分:2)

如果您删除了所有无法访问的代码,则最终会以

结束
cow = true ? 6 : 7;

6每次都是你的答案。

顺便提一下你的问题是什么?

答案 2 :(得分:2)

  

为什么true和false的任何组合都会返回它的值?

这里没有任何布尔组合。此?: operator会返回第一个或第二个表达式,不是条件本身

condition ? first_expression : second_expression;
  

条件必须评估为真或假。如果条件为真,   first_expression的评估为,并成为结果。如果条件是   false,second_expression被评估为并成为结果

由于此运算符为right-associative,因此您的代码可以作为;

true ? false ? false ? false ? 3 : 4 : 5 : 6 : 7

评估为;

true ? false ? false ? (false ? 3 : 4) : 5 : 6 : 7

评估为;

true ? false ? false ? 4 : 5 : 6 : 7

评估为;

true ? false ? (false ? 4 : 5) : 6 : 7

评估为;

true ? false ? 5 : 6 : 7

评估为;

true ? (false ? 5 : 6) : 7

评估为;

true ? 6 : 7

返回6