【问题标题】:Should C# enums end with a semi-colon?C# 枚举应该以分号结尾吗?
【发布时间】:2014-01-29 15:39:09
【问题描述】:

在 C# 中,定义枚举似乎可以在末尾带或不带分号:

public enum DaysOfWeek
{ Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday} ; //Optional Semicolon?

C# page from MSDN 显示以分号结尾的枚举,CarOptions 除外。

我还没有找到任何明确的参考,而且这两种方法似乎都可以在没有编译器警告的情况下工作。

那么最后是否应该有分号?

【问题讨论】:

  • (我猜@EricLippert 会很适合回答)
  • “应该”按照什么标准?在我看来,这是一个完全任意的风格问题,就像“类型定义开头的大括号应该出现在第一行的末尾还是下一行?”或“应该一个-line if 语句使用大括号(if (b) x(); else y(); vs if (b) { x(); } else { y(); })?"
  • 虽然我个人不喜欢类型声明后的分号(在 classinterfaceenumstruct 的最后一个 } 之后),但我更喜欢在后面多加一个逗号枚举中的最后一个成员。也就是说,我更愿意以... Sunday, } 结尾。所以我个人的偏好是:跳过可选的分号,包括所有可选的逗号。
  • @abelenky:直到事实发生四年后,我才看到您的评论。这里讨论了 C 和 C++ 需要 semi 的原因:stackoverflow.com/questions/785686/…。这些原因都不适用于 C#。分号在 C# 中的类或枚举的末尾是可选的,这是对习惯将半分号放在类型末尾的 C++ 开发人员的礼貌。除非我在测试解析器的规范合规性,否则我从来没有在 C# 类型的末尾放置过半。无论哪种方式,我都不会担心。

标签: c# .net enums


【解决方案1】:

来自C# specification(来自archive.org):

14.1 枚举声明

枚举声明声明了一个新的枚举类型。枚举声明 以关键字 enum 开头,并定义名称、可访问性、 基础类型和枚举成员。

  • 属性选择
  • 枚举修饰符 opt
  • 枚举标识符
  • 枚举基础选择
  • 枚举体
  • 选择

因此,允许在末尾使用 单个分号,但可选。

【讨论】:

    【解决方案2】:

    虽然 C# 规范允许使用可选分号,但 StyleCop (SA1106) 规则中的编码准则规定,如果分号是可选的,则不应使用。

    【讨论】:

    • 然而,来自MSDN 和其他知名来源的大部分 C# 代码都有最后的分号。(abalenky 对已删除答案的评论)
    • 这听起来有点开玩笑(确实如此),但微软并不完全以遵循标准而闻名,包括他们自己的标准。
    【解决方案3】:

    将枚举视为一个类。这些类不需要分号。示例中的分号很可能是为了美观而放在那里的。分号是多余的,但我们知道编译器不会抱怨这样的分号。例如

    public enum MyEnum
    {
        a,
        b,
        c
    };
    

    这个也可以

    public enum MyEnum
    {
        a,
        b,
        c
    }
    

    【讨论】:

    • 类/枚举末尾的多个分号会导致编译时错误,只允许和忽略一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    相关资源
    最近更新 更多