-8

有什么办法可以简化这个表达式:

我想做这个:

d = ( a == "x" ? b : a ) 

我可以使用三行代码:

d = a;
if(a == "x")
   d = b

我可以在一行代码/一个表达式中做到这一点,而不使用两次吗?

4

3 回答 3

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);

如果可以的话,选择一个更好的名字:)

于 2012-11-29T15:12:39.053 回答
1

我假设a会导致某种副作用,因此不能使用两次。(可能是函数,或者属性等)

您对第二个代码段很接近,但您想使用:

d = a;
if(d == "x")
   d = b

关键点在使用dif,而不是a再次使用。

如果你真的想减少代码行数,你可以改用这个:

d = a;
if(d == "x") d = b

恭喜,您现在只需两行代码。除此之外,您为“简化”代码所做的任何事情都可能在某种程度上弊大于利。因为它是代码的意图很清楚;制作结果的本地副本a,然后确定是使用a还是b通过if.

于 2012-11-29T15:24:49.150 回答
0
d = (d = a) == "x" ? b : d;

如前所述,问题是错误的,答案更糟。

于 2012-11-29T15:28:41.793 回答