5

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

struct Foo {
    public int A;
}

// ..

var foo = new Foo { A = 1, };

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

这是合法的 C# 并且它有什么有用的目的,还是我刚刚遇到了一个(良性)编译器错误?

4

3 回答 3

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
}

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

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

于 2012-05-24T12:29:19.307 回答
4

如果注释掉最后一项导致编译错误会很烦人:

var f = new Foo {
    A = 1,
//  B = 4
};

[Flags]
enum Characteristics
{
    None = 0,
    Big = 1,
//  Strong = 2
}

var primes = new int[] {
    2,
    3,
//  5
};
于 2012-05-24T12:33:27.687 回答
0

是的,它是合法的,没有特定的目的。

于 2012-05-24T12:39:16.967 回答