为什么编译器不在数组或对象初始化器中抱怨额外的','?

Dan*_*vil 5 c# c#-3.0 c#-4.0

使用简单类型

class A {
  public int X, Y;
}
Run Code Online (Sandbox Code Playgroud)

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

var a = new A { X=0, Y=0 };
Run Code Online (Sandbox Code Playgroud)

编译器也接受以下内容:

var a = new A { X=0, Y=0, }; // notice the additional ','
Run Code Online (Sandbox Code Playgroud)

同样的 int[] v = new int[] { 1, 2, };

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

Gre*_*ill 5

没有什么深刻的东西,很多(但不是全部)语言的编译器都接受这种常见的东西.这使得列表更容易:

var a = new A {
    X = 0,
    Y = 0,
};
Run Code Online (Sandbox Code Playgroud)

如果要添加Z = 0,则无需编辑上一行以添加逗号.这改善了源代码控制增量,因为只有一个新行而不是一个新行和一个更改行.

  • 当然你会把它添加为`Z = 0,`;) (2认同)
  • 在做错的时候被C/C++编译器一遍又一遍地羞辱,我现在对这些程序员友好的简化感到厌倦;) (2认同)