如何在Ternary运算符中编写多个语句?

问题描述 投票:4回答:3

我发布这个问题是因为我发现这类帖子没什么相似之处。我正在学习三元运算符。我想执行如下所示的操作:

  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语句编写三元运算符?请分享您对三元运营商的了解。

c# c#-4.0 operators ternary-operator
3个回答
4
投票

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

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

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

通常,只有在根据条件决定分配两个值之一时,才使用条件运算符。除此之外,你应该使用常规的if-else结构。不要试图将条件运算符搞砸到任何决策代码中,因为你经常发现自己遇到了这样的问题。


0
投票

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

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

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

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

0
投票

这可能是一个令人震惊的坏主意但你可以在三元运算符中调用返回赋值所需类型的方法。例如

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";
    }
© www.soinside.com 2019 - 2024. All rights reserved.