【问题标题】:Singular or plural for enumerations?枚举的单数还是复数?
【发布时间】:2010-11-23 02:03:19
【问题描述】:

你是用单数还是复数来枚举?我认为在声明中使用复数最有意义

enum Weekdays
{
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
}

...但我认为在使用类型时使用单数更有意义,例如

Weekday firstDayOfWeek = Weekday.Monday;

我在某处读到一个建议,使用单数和常规枚举,复数和标志,但我想听听更多的利弊。

【问题讨论】:

标签: coding-style enumeration


【解决方案1】:

在 .NET Framework 中,大多数“普通”枚举(例如 DayOfWeek)具有单数名称,而标志枚举(例如 StringSplitOptionsBindingFlags)具有复数名称。这是有道理的,因为一个标志枚举的值可以表示多个项目,但对于非标志枚举,它只能表示一个项目。

【讨论】:

    【解决方案2】:

    一个建议来自 .NET Framework Design Guidelines,第 59-60 页:

    不要对枚举使用单数类型名称,除非它的值是位 字段。

    public enum ConsoleColor {
      Black,
      Blue,
      Cyan,
      ...
    

    不要对以位域作为值的枚举使用复数类型名称,也称为标志枚举。

    [Flags]
    public enum ConsoleModifiers {
      Alt,
      Control,
      Shift
    }
    

    【讨论】:

      【解决方案3】:

      这是主观的,你使用什么并不重要,只要你是一致的(我个人使用单数作为我的 Sql 约定的继承)

      【讨论】:

      • 这很重要。约定促进了可读性和可维护性。个人一致性无法与传统一致性相比。
      • 如果每个图书馆都有自己的“主观”意见,很难保持一致。
      • 我想正如微软所说的使用单数,我们都应该使用单数。没有。只要你的复数化和单数化(?)保持一致,那真的没关系。
      【解决方案4】:

      一般来说,我认为枚举定义是一种类型定义,枚举的值是该类型可以具有的不同值;因此它有一个单数名称:

      enum Weekday { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY };
      
      enum CoffeeSize { SMALL, MEDIUM, LARGE };
      

      【讨论】:

        【解决方案5】:

        这里直接来自微软:

        http://msdn.microsoft.com/en-us/library/4x252001(VS.71).aspx

        对大多数 Enum 使用单数名称 类型,但使用 Enum 的复数名称 作为位域的类型。

        【讨论】:

        • 注意位域应该是复数形式。
        • 这里是 MSDN 枚举设计指南的最新版本:msdn.microsoft.com/en-us/library/ms229058.aspx
        • 我非常感谢我读过的一本书是Framework Design Guidelines。基本上它是由 15 位以上的作者编写的,他们多年来都在 .NET 框架的开发中发挥了重要作用。这本书让您深入了解他们在开发框架 API 时的思维过程,并且这样做使您在导航任何 Microsoft 框架、工具包等时都具有洞察力。即使不是全部,也可以在他们的文档中找到许多文本。 docs 网站,但这很好地打包了它。
        【解决方案6】:

        Microsoft recommends 对枚举使用单数名称,除非它使用 Flags 属性。从《框架设计指南》一书中,你不应该在枚举类型名称后面加上 Enum、Flags 等,并且你不应该在枚举值前面加上缩写或首字母缩略词,这在当时 VB 枚举中很常见。

        【讨论】:

        • 但真的有原因吗?我们在接口前加上“I”。为什么不用'E'前缀枚举和'F'标志。这将使它一清二楚。请注意,我不喜欢为其他任何东西添加前缀,但这些是特殊情况,例如类型永远不会改变的接口。
        【解决方案7】:

        一般来说,我认为枚举定义是一个类型定义,其值是 enum 是类型可以具有的不同值;因此它有一个单数名称: enum Weekday { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }; enum CoffeeSize { SMALL, MEDIUM, LARGE };

        是的。如果您有将枚举实现为类的心理体验,那么 您为类型使用单数名称这一事实应该表明它 对此类枚举使用单数名称是有意义的。例如,

        struct Weekday {};
        
        const Weekday SUNDAY;
        const Weekday MONDAY;
        const Weekday TUESDAY;
        

        ...

        void func (Weekday *day)
        {
           if (day == &SUNDAY)
               ...
        }
        

        对于谁更喜欢枚举中的复数,你会命名为struct Weekdays吗?

        【讨论】:

          猜你喜欢
          • 2013-03-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-12
          • 1970-01-01
          相关资源
          最近更新 更多