2011-03-25 42 views
-1

可能重复:
In your opinion what is more readable: ?? (operator) or use of if's空合并运算符 - 您更喜欢以下哪一项?

比方说,你有一个检查是一个列表是空的方法。如果是这样,它将实例化它。

一般情况下,我们可以这样做:

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

我最近了解了空合并运算符和我很想改变这种状况到:

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

它更紧凑,看起来像它将被编译为与“传统”方法相同的一组指令。

可能有些迂腐,但我想知道你是否对这种方法有任何保留,并且你实际使用了哪种方法。

+2

我会用较短的一个。任何值得他在盐中加权的C#程序员都知道''''操作符(或者至少很容易被教导) – Earlz 2011-03-25 10:35:43

+0

请注意,它们并不完全相同[如果StringList是属性](http://stackoverflow.com/questions/5403316/coalesce-operator-usage-c/5403354#5403354).. – Blorgbeard 2011-03-25 10:37:53

+1

可能的重复[在你看来更可读:? (运营商)或使用if](http://stackoverflow.com/questions/1324331/in-your-opinion-what-is-more-readable-operator-or-use-of-ifs)和http:// stackoverflow.com/q/1791852/310574 – Gabe 2011-03-25 10:39:30

回答

1

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

+1

任何像样的程序员都已经知道它是什么意思,或者问一个人(一次) – Blorgbeard 2011-03-25 10:36:46

+0

你会惊讶地发现“正规的程序员”不知道什么。 – Pabuc 2011-03-25 10:41:24

+1

我的观点是,如果他们“体面”他们会问,然后他们会知道。 – Blorgbeard 2011-03-25 10:43:26

3

在属性的情况下,存在一种有趣的语法:

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

该1衬垫可以使用DUP stloc而不是存储与分别装载场。例如:

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

微优化,也许 - 但很可爱。