【问题标题】:How to write multiple statements in Ternary operator?如何在三元运算符中编写多个语句?
【发布时间】:2014-10-01 18:38:53
【问题描述】:

我发布此问题是因为我没有发现与此类帖子类似的内容。 我正在学习三元运算符。 我想执行如下所示的操作:

  bool Divisible = false;
  foreach (var Number in NumberList))
  {
    var  Number = 242;
    if ((Number %= 2) | (Number %= 6))
    {
       Divisible = true;
    }
    else
    {
       Divisible = false;
    }
  }

我们可以使用三元运算符这样写:

var Divisible = (Number %= 2 | Number %= 6) ? false : true ;

但是如果在else块中有多个语句,那该怎么办呢?

  bool Divisible = false;
  foreach (var Number in NumberList))
  {
    var  Number = 242;
    if ((Number %= 2) | (Number %= 6))
    {
       Divisible = true;
    }
    else
    {
       Divisible = false;
       break;
    }
  }

我们如何编写带有多个 else 语句的三元运算符? 请分享您对三元运算符的了解。

【问题讨论】:

  • "像这样:"像什么?您的问题似乎缺少某些内容。
  • 为什么要使用三元运算符来处理并非设计用于和混淆代码的东西?使用 if-else 语句保持可读性,这没有什么问题。
  • 每件事都有它自己的优点。在您的情况下,您别无选择,只能使用 if .. else 构造。
  • 嘿BoltClock,谢谢你告诉我我错过了写三元语句。现在问题完成了。可以的话请指导。提前致谢。 :)
  • 此代码无法编译,因为您在循环内重新分配了循环变量。另外,赋值运算符的用法是什么?

标签: c# c#-4.0 operators ternary-operator


【解决方案1】:

但是如果在 else 块中有多个语句,那该怎么办呢?

如果语句不相关,则不要使用条件运算符。只需使用您已有的 if-else。

在您的情况下,由于当且仅当 Divisible 设置为 false 时您的代码才需要中断,那么即使您想破解它,您不能使用条件运算符,因为break 是语句,而不是表达式,因此不能作为条件运算符的一部分出现。

一般来说,当您想要根据条件决定分配两个值之一时,您才使用条件运算符。对于 anything else,您确实应该使用常规的 if-else 构造。不要试图将条件运算符硬塞到几乎任何决策代码中,因为您经常会发现自己遇到类似这样的问题。

【讨论】:

    【解决方案2】:

    三元运算符(即“速记 if-else”)仅用于根据布尔值评估两个语句之一。它不像 if 那样是一个流控制结构;它实际上返回它执行的语句的结果。你不能用它来执行这样的代码。

    您可以在此处阅读有关三元运算符如何工作的更多信息?: Operator (C# Reference)

    对于您的原始代码,您也可以执行以下操作:

    var Divisible = !(Number %= 2 | Number %= 6)
    

    【讨论】:

      【解决方案3】:

      这可以说是一个非常糟糕的主意,但是您可以调用三元运算符中的方法来返回分配正在寻找的类型。例如

      string doNotDoThis = yeahNah ? iToldYou(bad) : notToDoThis(idea);
      
      // ...
      
      string iToldYou(object thing)
          {
          // you can do stuff here with thing but seriously?
          return "yeahNah was yeah";
          }
      
      string notToDoThis(object thing)
          {
          // you can do stuff here with thing but seriously?
          return "yeahNah was nah";
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-12-30
        • 1970-01-01
        • 2013-02-13
        • 2021-05-17
        • 1970-01-01
        • 2018-04-18
        相关资源
        最近更新 更多