有没有办法简化这个表达式:
我想这样做:
d = ( a == "x" ? b : a )
我可以使用三行代码:
d = a;
if(a == "x")
d = b
我可以在一行代码/一个表达式中执行此操作,而不使用 a 两次吗?
答案 0 :(得分:9)
我可以在一行代码/一个表达式中完成,而不使用两次吗?
是的,但你真的不应该:
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);
如果可以,请选择更好的名称:)
答案 1 :(得分:1)
我假设a
会导致某种副作用,因此不能使用两次。 (也许它是一个功能,或财产等。)
您已接近第二个代码段,但您想使用:
d = a;
if(d == "x")
d = b
关键点在d
使用if
,而不是a
。
如果你真的想减少代码行数,你可以改用:
d = a;
if(d == "x") d = b
恭喜,您现在需要两行代码。除此之外,你试图“简化”代码所做的任何事情都可能在某些方面造成更多弊大于利。因为代码的意图非常明确;制作a
结果的本地副本,然后通过a
确定是使用b
还是if
。
答案 2 :(得分:0)
d = (d = a) == "x" ? b : d;
如前所述,问题是错误的,答案更糟。