【问题标题】:Why is the compiler not complaining about an additional ',' in Array or Object Initializers?为什么编译器不抱怨数组或对象初始化器中的附加“,”?
【发布时间】:2010-04-20 10:40:52
【问题描述】:

使用类似的简单类型

class A {
  public int X, Y;
}

使用对象初始化器,可以编写

var a = new A { X=0, Y=0 };

但是编译器也接受以下内容:

var a = new A { X=0, Y=0, }; // notice the additional ','

int[] v = new int[] { 1, 2, }; 也一样

这看起来有点奇怪……他们是不是忘记在编译器中拒绝额外的','还是这背后有更深的含义?

【问题讨论】:

  • 他们没有忘记任何东西,这是语言设计中经过深思熟虑的一部分。 (在 Microsoft C#3 规范中,在第 7.5.10.2 节中对对象初始化器进行了说明,在第 7.5.10.3 节中对集合初始化器进行了说明。)
  • 仅供参考,这个技巧也适用于枚举。而且我们还允许在类声明后面加上一个多余的分号,因为一些 C++ 程序员习惯于键入一个。

标签: c# c#-3.0 c#-4.0


【解决方案1】:

没有什么深奥的东西,这是许多(但不是所有)语言的编译器都接受的共同点。这使得做列表更容易:

var a = new A {
    X = 0,
    Y = 0,
};

当您要添加Z = 0 时,您无需编辑上一行添加逗号。这改进了源代码控制增量,因为只有一个新行而不是一个新行和一个更改行。

【讨论】:

  • 当然你会把它添加为Z = 0, ;)
  • 在做错时被 C/C++ 编译器一次又一次地惩罚,我现在对这些对程序员友好的简化感到恶心 ;)
【解决方案2】:

这也简化了代码生成器的实现。他们不必检查最后一个逗号。

【讨论】:

    猜你喜欢
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 2016-11-01
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多