有什么办法可以简化这个表达式:
我想做这个:
d = ( a == "x" ? b : a )
我可以使用三行代码:
d = a;
if(a == "x")
d = b
我可以在一行代码/一个表达式中做到这一点,而不使用两次吗?
有什么办法可以简化这个表达式:
我想做这个:
d = ( a == "x" ? b : a )
我可以使用三行代码:
d = a;
if(a == "x")
d = b
我可以在一行代码/一个表达式中做到这一点,而不使用两次吗?
我可以在一行代码/一个表达式中做到这一点,而不使用两次吗?
是的,但你真的不应该:
d = new[] { a }.Except("x").DefaultIfEmpty(b);
我真的不是认真地建议这一点 - 只是指出您的标准并不是“可读”的一个很好的指标。
如果你发现你经常这样做,你可以写一个扩展方法,例如
public static string OrDefaultFor(this string input,
string invalidInput,
string replacement)
{
return input == invalidInput ? replacement : input;
}
然后:
d = a.OrDefaultFor("x", b);
如果可以的话,选择一个更好的名字:)
我假设a
会导致某种副作用,因此不能使用两次。(可能是函数,或者属性等)
您对第二个代码段很接近,但您想使用:
d = a;
if(d == "x")
d = b
关键点在使用d
中if
,而不是a
再次使用。
如果你真的想减少代码行数,你可以改用这个:
d = a;
if(d == "x") d = b
恭喜,您现在只需两行代码。除此之外,您为“简化”代码所做的任何事情都可能在某种程度上弊大于利。因为它是代码的意图很清楚;制作结果的本地副本a
,然后确定是使用a
还是b
通过if
.
d = (d = a) == "x" ? b : d;
如前所述,问题是错误的,答案更糟。