空融合运算符 - 您更喜欢以下哪个?

时间:2011-03-25 10:33:49

标签: c# null-coalescing-operator

  

可能重复:
  In your opinion what is more readable: ?? (operator) or use of if's

假设您有一个检查列表为空的方法。如果是这样,它会实例化它。

一般来说,我们会这样做:

if (StringList == null)
    StringList = new List<string>();

我最近了解了null-coalescing运算符,我很想将其更改为:

StringList = StringList ?? new List<string>();

它更紧凑,看起来它将被编译为与'传统'方法相同的指令集。

可能有点迂腐,但我想知道你是否对这种方法有任何保留,而且你实际上是在使用它。

2 个答案:

答案 0 :(得分:3)

对于属性,有一个有趣的语法:

private someType foo;
public SomeType Foo {
    get { return foo ?? (foo = {init}); }
}

这个1-liner可以使用dup stloc而不是分别存储和加载字段。例如:

private List<string> foo;
public List<string> Foo {
    get { return foo ?? (foo = new List<string>()); }
}

微观优化,也许 - 但非常可爱。

答案 1 :(得分:1)

这一切都取决于你的团队。不是每个人都能理解??操作员,但它更清洁。一旦你习惯了它,这是一个很好的方法。我仍然坚持if检查。你永远不知道谁会更新你的代码。