枚举的单数或复数?

时间:2009-08-26 16:26:58

标签: coding-style enumeration

您是否使用单数或复数进行枚举?我认为声明中的复数是最合理的

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

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

Weekday firstDayOfWeek = Weekday.Monday;

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

8 个答案:

答案 0 :(得分:74)

这是直接来自微软:

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

  

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

答案 1 :(得分:22)

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

  

执行对枚举使用单数类型名称,除非其值为位   字段。

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

执行对枚举使用复数类型名称,将位字段作为值,也称为标志枚举。

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

答案 2 :(得分:11)

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

答案 3 :(得分:3)

  

通常,我认为枚举定义是一个类型定义,其值为   枚举是类型可以具有的不同值;因此它有一个单一的名字:   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吗?

答案 4 :(得分:2)

Microsoft recommends使用单数名称进行枚举,除非它使用Flags属性。从框架设计指南书中可以看出,您不应该使用Enum,Flags等后缀枚举类型名称,并且您不应该使用缩写或首字母缩写词作为枚举值的前缀,这与当天的VB枚举相同。

答案 5 :(得分:1)

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

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

enum CoffeeSize { SMALL, MEDIUM, LARGE };

答案 6 :(得分:0)

这是主观的,无论你使用什么,只要你是一致的(我个人使用单数作为我的Sql约定的结转)

答案 7 :(得分:0)

与C#/ Microsoft约定一样,Java中的枚举应该是单数的:http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html