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语句的替代品.
您可以使用
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)
但一般来说,除非打高尔夫球,否则我会远离嵌套的条件运算符.
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)