为什么这个多余的逗号会编译?

B. *_*non 3 c# enums

在查看一些遗留代码时,我遇到了这个枚举:

    public enum cmdResults 
    {
        cmdNotFound = 0,    
        cmdFound    = 1,    
        cmdExit     = 2,    
        cmdSuccess  = 3,    
        cmdFail     = 4,    
        cmdTimeout  = 5,    
        cmdProcess  = 6,
        cmdAddTime  = 7,
    };
Run Code Online (Sandbox Code Playgroud)

在注意到最终枚举成员之后的逗号时,我惊呆了; 我删除了它,并且正如预期的那样,它仍然被编译.但为什么它最终的逗号一起使用?

(并没有提到成员的奇怪排序;我会在索引0处放置一个新的"cmdNothing",或者至少让"cmdFail"占据该位置)

Ser*_*rvy 11

因为C#编译器编写者选择在末尾创建一个有效语法的可选逗号.

我非常喜欢这个,因为这意味着你不需要特殊情况下的最后一行.您可以复制粘贴线条,在任何位置添加新线条(包括末尾)而不考虑它的位置,删除线条而无需修复逗号等.通过允许多余的逗号不会引入歧义或其他问题.

  • @ClayShannon好东西它是可选的,你不需要使用它,如果你有这种感觉. (3认同)
  • 显然你不能取悦所有人. (2认同)