【问题标题】:Multiple ternary operators and evaluating int as boolean mystery [closed]多个三元运算符并将 int 评估为布尔之谜 [关闭]
【发布时间】:2016-02-12 15:49:54
【问题描述】:
int cow;
int cow = true ? false ? false ? false ? 3 : 4 : 5 : 6 : 7;

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

为什么它会给我它给我的结果?

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

【问题讨论】:

  • 没有“将 int 评估为布尔值”!你有什么问题?
  • 请通过说明您希望该行的行为方式进行澄清。
  • 您给我的代码打印 6,将第一个 false 更改为 `true' 打印 5。我认为您需要重新检查您的代码。

标签: c# int boolean ternary-operator


【解决方案1】:

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

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

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

这是不使用三元的等效代码。它总是会落入cow = 6块。

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

【讨论】:

  • 我希望将其视为实际的 if 语句使其更易于理解。祝你好运!
  • 是的,我现在写它们就像声明一样!如果可以的话,我也会选择您作为有效答案!
【解决方案2】:

为什么真假的任意组合都会返回它的值?

这里没有任何布尔值的组合。这个?: 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

【讨论】:

  • @MakerOfTheUnicake 很高兴为您提供帮助。我希望我能对你的问题给出足够的解释。
  • 我会一步一步地检查它,看看我是否明白,当我把它标记为答案时。再次感谢。
【解决方案3】:

如果你删除了所有无法访问的代码,你最终会得到 ​​p>

cow = true ? 6 : 7;

6 将是您每次的答案。

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

【讨论】:

  • 这是我的问题。
猜你喜欢
  • 2017-05-24
  • 1970-01-01
  • 2019-04-08
  • 2017-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-03
相关资源
最近更新 更多