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

时间:2014-08-08 10:01:44

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

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

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

3 个答案:

答案 0 :(得分:4)

  

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

如果陈述不相关,那么您就不会使用条件运算符。只需使用你已经拥有的if-else。

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

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

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分: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";
    }