【问题标题】:Why does this superfluous comma compile? [duplicate]为什么这个多余的逗号会编译? [复制]
【发布时间】:2013-03-19 20:53:02
【问题描述】:

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

    public enum cmdResults 
    {
        cmdNotFound = 0,    
        cmdFound    = 1,    
        cmdExit     = 2,    
        cmdSuccess  = 3,    
        cmdFail     = 4,    
        cmdTimeout  = 5,    
        cmdProcess  = 6,
        cmdAddTime  = 7,
    };

注意到最后一个枚举成员后面的逗号时,我惊呆了;我删除了它,并且正如预期的那样,它仍然编译。但是为什么它最后的逗号一起工作?

(这并没有提到对我来说奇怪的成员排序;我要么在索引 0 处放置一个新的“cmdNothing”,或者至少让“cmdFail”占据那个位置)

【问题讨论】:

  • 排序可以通过枚举值随时间增长来解释。新值不能替换现有值,否则任何调用它的代码(枚举毕竟是公共的)都会中断。

标签: c# enums


【解决方案1】:

因为 C# 编译器编写者选择使末尾的可选逗号成为有效语法。

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

【讨论】:

  • 我很高兴它确实允许...在快速更改/构建/测试周期中添加/删除枚举值变得更好!
  • 请注意,相同的语法适用于数组和对象初始值设定项。我也非常喜欢这个,特别是因为它不会因为不必要的行更改而使版本控制差异变得混乱。
  • 对我来说,它看起来比一袋烟头丑 9 倍。
  • 显然你不能取悦所有人。
  • @ClayShannon 好在它是可选的,如果你有这种感觉就不需要使用它。
【解决方案2】:

它编译是因为它是合法的语法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多