【问题标题】:Ternary with boolean condition in c#c#中带有布尔条件的三元
【发布时间】:2014-08-29 16:07:15
【问题描述】:

如果我要编写这段代码,它适用于正常的“if-else”布局。

if(isOn)
{
    i = 10;
}
else
{
    i = 20;
}

虽然我不确定如何使用三元运算符进行转换

        isOn = true ? i = 1 : i = 0;

错误:无法确定条件表达式的类型,因为 'void' 和 'void' 之间没有隐式转换。

编辑: 答案=i = isOn ? 10 : 20;

可以用方法做到这一点吗?

if(isOn)
{
    foo();
}
else
{
    bar();
}

【问题讨论】:

  • 编辑添加方法问题。
  • 对于您的编辑:为什么要使用方法来做到这一点?你的if 还不够清楚吗?这也取决于这些方法返回什么。如果他们没有返回任何东西void,那么我相信你不能使用三元运算符。
  • 如果您有新问题,请单独提出问题,不要用新问题更新现有问题。
  • 感谢@Habib 我的错误。

标签: c# ternary-operator


【解决方案1】:

请尝试以下操作。顺便说一句,它仅适用于值分配而不是方法调用。

i = isOn ? 10 : 20;

参考:

【讨论】:

  • 非常感谢。我已经编辑了问题,您知道是否可以使用方法吗?
  • @MarcC:- 你的返回方法是什么?因为答案取决于那个
  • 方法无效。
  • 更新了答案。方法调用是不可能的。
  • @Habib 非常坚定的人可以将 void 方法包装到 lambda 中,返回假值,以实现将 ?: 与 void 函数一起使用的纯理论方法。
【解决方案2】:

这里有一个可能会有所帮助的解释。您要查找的语句是:

i = isOn ? 10 : 20;

这是什么意思:

(result) = (test) ? (value if test is true) : (value if test is false);

【讨论】:

    【解决方案3】:

    你在正确的轨道上,但有点偏离。 i = isOn ? 10 : 20;

    这里10 将分配给i 如果isOn == true20 将分配给i 如果isOn == false

    【讨论】:

      【解决方案4】:

      你可以试试这个:

      i = isOn? 10:20
      

      MSDN 说:

      条件必须评估为真或假。如果条件为真, first_expression 被评估并成为结果。如果条件是 false,second_expression 被评估并成为结果。只有一个 计算两个表达式中的一个。

      编辑:-

      如果您想在条件运算符中调用void 方法,您可以使用委托,否则无法对方法使用三元运算符。

      如果你的方法返回了一些东西,那么试试这样:

      i = isOn ? foo() : bar();    //assuming both methods return int
      

      【讨论】:

        【解决方案5】:

        试试下面的

        i = isOn ? 10 :20
        

        【讨论】:

          【解决方案6】:

          尝试以下方法:

          i = isOn ? 10 : 20
          

          【讨论】:

            【解决方案7】:

            你需要:

            i = true ? 10 : 20;
            

            true 是您的条件。

            【讨论】:

            • isOn 是 OP 代码中指定的 bool(条件)
            • OP 已经发布了这个问题的答案。 i = 开启? 10:20;
            • true 部分只是让 OP 用条件替换它。
            猜你喜欢
            • 1970-01-01
            • 2019-04-08
            • 2012-10-30
            • 2020-08-15
            • 1970-01-01
            • 2021-01-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多