C#operator?:如何简化一个表达式中的基本if语句

时间:2012-11-29 15:08:56

标签: c# expression operator-keyword

有没有办法简化这个表达式:

我想这样做:

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

我可以使用三行代码:

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

我可以在一行代码/一个表达式中执行此操作,而不使用 a 两次吗?

3 个答案:

答案 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;

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