.NET枚举允许在最后一个字段中使用逗号

为什么这个.NET枚举允许在最后一个字段中有一个逗号?
这有什么特别的意义吗?

[FlagsAttribute] public enum DependencyPropertyOptions : byte { Default = 1, ReadOnly = 2, Optional = 4, DelegateProperty = 32, Metadata = 8, NonSerialized = 16, } 

它没有什么特别的含义,只是编译器的工作方式,主要是因为这个原因:

 [FlagsAttribute] public enum DependencyPropertyOptions : byte { Default = 1, ReadOnly = 2, Optional = 4, DelegateProperty = 32, Metadata = 8, NonSerialized = 16, //EnumPropertyIWantToCommentOutEasily = 32 } 

通过评论请求:这个信息直接来自C#规范(页363 /第19.7节)

像标准C ++一样,C#允许在数组初始化器结尾处使用尾随逗号。 该语法提供了从这样的列表添加或删除成员的灵活性,并且简化了机器生成这样的列表。

另外(尼克Craver后)更容易添加新的枚举。

这种行为不适合枚举。 考虑以下几点:

 var list = new int[] { 1, 2, 3, }; 

另一个原因是:它使编码gen更容易。

我知道这是一个老话题,但另一种对这个问题有意义的方法是代码版本控制系统。

考虑下面的例子:

 //version 1 var myArray = { "item 1", "item 2" }; //version 2 var myArray = { "item 1", "item 2", //will be considered a change, it may be considered an erroneous approach "item 3" } 

现在考虑这种方法:

 //version 1 var myArray = { "item 1", "item 2", }; //version 2 var myArray = { "item 1", "item 2", //will not be considered a change, it may be considered an erroneous approach too, but, means that the code wasn't changed intrinsically "item 3", }; 

无论如何,根据情况,这两种方法都可能被认为是错误的或正确的。 我特别喜欢第二种方法,在处理代码版本控制系统时更有意义。

无论如何,希望这有助于。