例如,如果我有这个代码:
if (foo != default(foo))
{
int foo2 = foo;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法将此缩短为仅作业?在伪代码中,类似于:foo2 =如果不是默认的foo
试图缩短它的问题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)
在我看来,这在你的意图方面要清楚得多,并且确实避免了你在条件运算符中获得的额外任务.