新Foo {A = 1,} Bug或功能?

Bra*_*vic 5 c# c#-4.0

以下C#片段在我的Visual Studio 2010下编译并运行:

struct Foo {
    public int A;
}

// ..

var foo = new Foo { A = 1, };
Run Code Online (Sandbox Code Playgroud)

请注意对象初始值设定项中的尾随逗号.

这是合法的C#并且它有任何有用的用途,或者我刚刚遇到(良性)编译器错误?

Nik*_*wal 9

Yes it is very much legal and useful in C# to have trailing commas and no it is not a (benign) compiler bug.

为方便起见,Microsoft添加了该功能 - 如果您不需要特殊情况下的第一个或最后一个项目,则以编程方式生成代码时特别有用.您将在枚举声明中找到类似的语法,在对象初始化,数组,列表等中分配属性.

它允许使用尾随逗号简单地使得更加统一,以便在初始化程序中包含随时间变化长度的项目列表.例如,由于您在那里有逗号,因此在末尾添加新项目仅涉及编辑一行,而不是编辑一行以添加逗号,另一行添加新内容.

此外,如果你注释掉最后一个选项怎么办?

enum Cars
{
   Honda,
   Hyundai,
   //Ford
}
Run Code Online (Sandbox Code Playgroud)

请参阅Jon Skeet的.NET答案现在支持数组中的尾随逗号,就像python一样

Food for thought: If it had no use why would it be there in the first place?