有没有办法缩短在赋值中使用if语句?

时间:2012-08-06 16:47:16

标签: c#

例如,如果我有这段代码:

if (foo != default(foo))
{ 
  int foo2 = foo; 
}

有没有办法将此缩短为仅作业?在伪代码中,类似于: foo2 =如果不是默认的foo

4 个答案:

答案 0 :(得分:5)

尝试缩短此问题的问题是foo2仅在if语句的范围内有效。通过将其移动到一行,您必须始终在外部范围中定义foo2,并且始终需要一些值。

如果可以接受,可以使用C#'s conditional operator

int foo2 = foo != default(foo) ? foo : default(int);

请注意,当foo == default(foo)成为最后一部分时,您需要一些东西。使用int值,我最后可能会使用: 0;,但由于您正在检查default(foo),我假设您的“真实用例”可能不是Int32值...


编辑:

  

(int)是一个事后的想法,在我实际尝试的时候,我已经分配了foo2,所以这正是我想要的。

鉴于此评论,你可以这样做:

foo2 = foo != default(foo) ? foo : foo2;

如果foo2没有默认值,这将有效地重新分配foo,如果确实如此,则将其保留(将其分配给自己)。

话虽如此,我个人更喜欢类似于你原作的东西:

// Assumes foo2 is already defined, based on your comment
if (foo != default(foo))
    foo2 = foo;

在我看来,就你的意图而言,这是更加明确的,并且确实避免了你使用条件算子给你自己的额外任务。

答案 1 :(得分:0)

// either
int foo2 = (foo != default(foo)) ? foo : default(int);
// or
int? foo2 = (foo != default(foo)) ? foo : null;

答案 2 :(得分:0)

你不可能比你更简化。如果你只是设置foo2的值而不是声明它(并且也在范围块中),那么你可以想象它将它重构为一种微小增益的方法。

答案 3 :(得分:0)

您也可以这样做:

foo2 = foo != default(foo) ? foo : foo2;