108

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

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

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

Weekday firstDayOfWeek = Weekday.Monday;

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

4

7 回答 7

107

这里直接来自微软:

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

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

于 2009-08-26T16:32:52.550 回答
35

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

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

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

对于以位字段为值的枚举,请使用复数类型名称,也称为标志枚举

[Flags]
public enum ConsoleModifiers {
  Alt,
  Control,
  Shift
}
于 2009-08-26T16:30:45.173 回答
15

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

于 2009-08-26T16:28:43.540 回答
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;

...

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

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

于 2010-11-24T10:16:31.807 回答
2

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

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

enum CoffeeSize { SMALL, MEDIUM, LARGE };
于 2009-08-26T16:32:21.020 回答
2

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

于 2009-08-26T16:35:07.833 回答
0

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

于 2009-08-26T16:31:17.717 回答