以下C#代码段在我的Visual Studio 2010下编译并运行:
struct Foo {
public int A;
}
// ..
var foo = new Foo { A = 1, };
请注意对象初始值设定项中的尾随逗号。
这是合法的C#并且它是否有任何有用的用途,或者我刚刚遇到(良性)编译器错误?
答案 0 :(得分: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 now support trailing comma in array like python does
的Jon Skeet答案 Food for thought: If it had no use why would it be there in the first place?
答案 1 :(得分: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
};
答案 2 :(得分:0)
是合法且没有特定目的。