例如,如果我有这段代码:
if (foo != default(foo))
{
int foo2 = foo;
}
有没有办法将此缩短为仅作业?在伪代码中,类似于: foo2 =如果不是默认的foo
答案 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;