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

pro*_*don 0 c#

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

if (foo != default(foo))
{ 
  int foo2 = foo; 
}
Run Code Online (Sandbox Code Playgroud)

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

Ree*_*sey 5

试图缩短它的问题foo2是只在if语句中的范围内有效.通过将其移动到一行,您总是必须foo2在外部范围中定义,并且它总是需要一些值.

如果这是可以接受的,你可以使用C#的条件运算符:

int foo2 = foo != default(foo) ? foo : default(int);
Run Code Online (Sandbox Code Playgroud)

请注意,您需要什么时候才能foo == default(foo)成为最后一部分.使用int值,我可能会: 0;在最后使用,但既然你正在检查default(foo),我假设你的"真实用例"可能不是一个Int32值......


编辑:

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

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

foo2 = foo != default(foo) ? foo : foo2;
Run Code Online (Sandbox Code Playgroud)

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

话虽这么说,我个人更喜欢类似于你原创的东西:

// Assumes foo2 is already defined, based on your comment
if (foo != default(foo))
    foo2 = foo;
Run Code Online (Sandbox Code Playgroud)

在我看来,这在你的意图方面要清楚得多,并且确实避免了你在条件运算符中获得的额外任务.