枚举的单数或复数?

Jan*_*ard 76 enumeration coding-style

您是使用单数还是复数进行枚举?我认为在宣言中使用复数是最合理的

enum Weekdays
{
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
}
Run Code Online (Sandbox Code Playgroud)

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

Weekday firstDayOfWeek = Weekday.Monday;
Run Code Online (Sandbox Code Playgroud)

我在某个地方读了一个建议,使用单数的常规枚举和带有标志的复数,但我想听到更多的利弊.

Mat*_*uwe 78

这是直接来自微软:

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

对大多数枚举类型使用单数名称,但对位字段的枚举类型使用复数名称.

  • 以下是MSDN枚举设计指南的最新版本:http://msdn.microsoft.com/en-us/library/ms229058.aspx (2认同)

Mic*_*tta 24

一条建议来自.NET Framework设计指南,第59-60页:

不要使用单一类型名称枚举,除非它的值是位域.

public enum ConsoleColor {
  Black,
  Blue,
  Cyan,
  ...
Run Code Online (Sandbox Code Playgroud)

不要使用多种类型的名称与位域作为值枚举,也称为标志枚举.

[Flags]
public enum ConsoleModifiers {
  Alt,
  Control,
  Shift
}
Run Code Online (Sandbox Code Playgroud)


Meh*_*ari 12

在.NET Framework中,最"正常"的枚举(例如DayOfWeek)具有奇异的名称和标志枚举(例如StringSplitOptions,BindingFlags),有多种名称.这是有道理的,因为标志枚举的值可以表示多个项目,但对于非标志枚举,它只能表示单个项目.


Avi*_*Avi 5

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

enum Weekday { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY };

enum CoffeeSize { SMALL, MEDIUM, LARGE };
Run Code Online (Sandbox Code Playgroud)


Bri*_*eon 5

Microsoft建议对枚举使用单数名称,除非它使用该Flags属性。正如《框架设计指南》一书中所述,您不应在枚举类型名称后添加 Enum、Flags 等后缀,也不应在枚举值前添加缩写或首字母缩略词作为前缀,这在 VB 枚举中很常见。


小智 5

一般来说,我认为枚举定义是一个类型定义,枚举的值是类型可以具有的不同值;因此它有一个单数名称: 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;
Run Code Online (Sandbox Code Playgroud)

...

void func (Weekday *day)
{
   if (day == &SUNDAY)
       ...
}
Run Code Online (Sandbox Code Playgroud)

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