我在想这是否有可能,因为我开始使用三元运算符来减少代码行数,我喜欢它。
if (x==y)
{
z += x;
} else if (x==z)
{
z += y;
} else {
z += 1;
}
如果只有一个这样的if语句,我现在可以做到这一点:
z = x == y ? z += x : z += 1;
我在想这是否有可能,因为我开始使用三元运算符来减少代码行数,我喜欢它。
if (x==y)
{
z += x;
} else if (x==z)
{
z += y;
} else {
z += 1;
}
如果只有一个这样的if语句,我现在可以做到这一点:
z = x == y ? z += x : z += 1;
就像这样:
z =
x == y ? z + x :
x == z ? z + y :
z + 1;
如果您将z += x
用作操作数,它最终会执行z = (z += x)
。虽然在这种特殊情况下它起作用,因为表达式z += x
的结果是z
的最终值,但在其他情况下可能无法正常工作。z +=
,您可以这样做:z +=
x == y ? x :
x == z ? y :
1;
要小心使用。代码越简单易懂,可维护性就越高,而嵌套的条件操作并不容易阅读。此外,只有在将一个表达式作为条件操作的结果时才使用它,它不能替代if
语句。
您可以使用
z += x == y ? x : x == z ? y : 1;
z += x == y ? x : (x == z ? y : 1);
但是通常情况下,除非在高尔夫比赛中使用,否则我会避免使用嵌套条件运算符。
只需四行代码,且我认为这是最易读的。这里不需要三目运算符:
if (x == y || x == z)
z += y;
else
z++;
如果我必须使用三目表达式进行编写,我会这样做:
z += (x == y || x == z) ? y : 1;
x
和y
都是相同的,那么决定添加哪一个就没有意义了;如果它们不同,那么你无论如何都会添加y
。 - BoltClock(x==y)?(z+=x):((x==z)?(z+=y):(z+=1))
var result = a ? x : b ? y : z;
将计算 z
的过程转化为一行代码,我会这样做:
public int GetZBasedOnXY(int z, int x, int y)
{
// Chose this solution, but any can go in here and work.
if (x == y || x == z)
return z + y;
else
return z + 1;
}
然后:
z = GetZBasedOnXY(z, x, y);
更易读,并且如果命名良好且方法具有单元测试覆盖范围,那就更好了。