0

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

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

有没有办法将其缩短为仅分配?在伪代码中,类似于: foo2 = if not default foo

4

4 回答 4

5

试图缩短它的问题在于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;

在我看来,就您的意图而言,这更加清楚,并且确实避免了您使用条件运算符获得的额外分配。

于 2012-08-06T16:49:47.397 回答
0
// either
int foo2 = (foo != default(foo)) ? foo : default(int);
// or
int? foo2 = (foo != default(foo)) ? foo : null;
于 2012-08-06T16:50:53.247 回答
0

您将无法再简化它。如果您只是设置值foo2而不是声明它(以及在范围块中),那么您可以想象将其重构为一种方法以获得微小的收益。

于 2012-08-06T16:51:09.873 回答
0

你也可以这样做:

foo2 = foo != default(foo) ? foo : foo2; 
于 2012-08-06T16:54:14.563 回答