如何转换if,否则如果逻辑成三元运算符?

som*_*ool 12 c# ternary-operator

我只是想知道这是否可能,因为我开始使用三元运算符来减少代码行,我很喜欢它.

if (x==y)
{
    z += x;
} else if (x==z)
{
    z += y;
} else {
   z += 1;
}
Run Code Online (Sandbox Code Playgroud)

如果只有一个if语句,我现在可以这样做:

z = x == y ? z += x : z += 1;
Run Code Online (Sandbox Code Playgroud)

Guf*_*ffa 33

它会是这样的:

z =
  x == y ? z + x :
  x == z ? z + y :
  z + 1;
Run Code Online (Sandbox Code Playgroud)

如果你z += x用作操作数,它最终会做z = (z += x).虽然它适用于这种特殊情况,但由于表达式的结果z += x是最终值z,因此在其他情况下可能不起作用.

但是,由于所有操作都有z +=共同点,您可以这样做:

z +=
  x == y ? x :
  x == z ? y :
  1;
Run Code Online (Sandbox Code Playgroud)

但要小心使用.代码通常更易读和可维护,而且嵌套的条件操作不是很易读.此外,仅当您将表达式作为条件操作的结果时才使用此选项,它不是if语句的替代品.


Joe*_*oey 5

您可以使用

z += x == y ? x : x == z ? y : 1;
Run Code Online (Sandbox Code Playgroud)

但说实话,这并不比以前更具可读性.您可以通过添加括号使其更清晰:

z += x == y ? x : (x == z ? y : 1);
Run Code Online (Sandbox Code Playgroud)

但一般来说,除非打高尔夫球,否则我会远离嵌套的条件运算符.

  • "能够".但请不要. (10认同)

Red*_*ter 5

IMO 中最易读的四行代码。这里不需要三元运算符:

if (x == y || x == z)
    z += y;
else 
   z++;    
Run Code Online (Sandbox Code Playgroud)

如果我必须使用三元来编写它,我会这样做:

z += (x == y || x == z) ? y : 1;
Run Code Online (Sandbox Code Playgroud)