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

时间:2010-01-27 13:54:09

标签: c# .net enums

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

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

5 个答案:

答案 0 :(得分:61)

它没有特殊意义,只是编译器的工作方式,主要是出于这个原因:

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

通过评论请求:此信息直接来自C# Specification (Page 355/Section 17.7)

  

与标准C ++一样,C#在数组初始值设定项的末尾允许使用尾随逗号。此语法提供了从此类列表中添加或删除成员的灵活性,并简化了此类列表的计算机生成。

答案 1 :(得分:12)

另外(对于Nick Craver的帖子)更容易添加新的枚举。

此行为不适用于枚举。请考虑以下事项:

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

答案 2 :(得分:10)

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

答案 3 :(得分:1)

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

考虑以下示例:

//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",
};

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

无论如何希望这有帮助。

答案 4 :(得分:0)

为什么要添加尾随逗号

为什么在手动编写代码时应该利用此功能?

  1. 生成的补丁影响较少的行。这使它们更易于阅读和查看。
  2. 自动合并和冲突解决更为精确,因为不会产生额外的噪音,从而使算法混乱。

示例

不带逗号(可以)

在以前的开发人员没有留下逗号的情况下添加一行的示例:

select opposition,
    sum(dismissal = 'caught')  caught,
    sum(dismissal = 'bowled')  bowled,
    sum(dismissal = 'run out') run_out,
    sum(dismissal = 'not out') not_out
from batsman
group by opposition

不使用逗号(更好)


在先前的开发人员留下尾随逗号时添加一行的示例:

@@ -119,7 +119,8 @@ namespace SomeApp.Example
   {
     NameTitle = contact.NameTitle,
     GivenName = contact.GivenName,
-    FamilyName = contact.FamilyName
+    FamilyName = contact.FamilyName,
+    ProperName = contact.ProperName
   },
   ContactTelephone1 = contact.ContactTelephone1,
   ContactType = contact.ContactType,

请注意,后者添加了一行,而删除了一行,又添加了两行。这对于人和机器都更容易处理。

为什么他们将其添加到C#中?

关于允许的原因,以及其他答案:

C#规范(第355页/第17.7节)规定:

类似于Standard C ++,C#允许在数组初始化程序的末尾添加逗号。这种语法提供了在此类列表中添加或删除成员的灵活性,并简化了此类列表的计算机生成。


这适用于数组初始化程序,对象初始化程序和枚举。