例如,如果我有这个代码:
if (foo != default(foo))
{
int foo2 = foo;
}
有没有办法将其缩短为仅分配?在伪代码中,类似于: foo2 = if not default foo
例如,如果我有这个代码:
if (foo != default(foo))
{
int foo2 = foo;
}
有没有办法将其缩短为仅分配?在伪代码中,类似于: foo2 = if not default foo
试图缩短它的问题在于foo2
它仅在 if 语句内的范围内有效。通过将其移至一行,您总是必须foo2
在外部范围中定义,并且它总是需要一些值。
如果这是可以接受的,您可以使用C# 的条件运算符:
int foo2 = foo != default(foo) ? foo : default(int);
请注意,您还需要一些用于 whenfoo == 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;
在我看来,就您的意图而言,这更加清楚,并且确实避免了您使用条件运算符获得的额外分配。
// either
int foo2 = (foo != default(foo)) ? foo : default(int);
// or
int? foo2 = (foo != default(foo)) ? foo : null;
您将无法再简化它。如果您只是设置值foo2
而不是声明它(以及在范围块中),那么您可以想象将其重构为一种方法以获得微小的收益。
你也可以这样做:
foo2 = foo != default(foo) ? foo : foo2;