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

本文关键字:编译 多余 为什么 | 更新日期: 2023-09-27 18:04:50

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

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

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

(这还没有提到对我来说奇怪的成员排序;我要么在索引0处添加一个新的"cmdNothing",要么至少让"cmdFail"代替这个位置)

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

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

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

可以编译,因为它的语法是合法的。