Coding style 枚举是单数还是复数?

Coding style 枚举是单数还是复数?,coding-style,enumeration,Coding Style,Enumeration,枚举时使用单数还是复数?我认为在宣言中用复数最有意义 enum Weekdays { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday } 。。。但我认为在使用类型时使用单数更有意义,例如 Weekday firstDayOfWeek = Weekday.Monday; 我在某个地方读到一条建议,建议使用单数形式的正则枚举和复数形式的标志,但我想听听更多的优点和

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

enum Weekdays
{
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
}
。。。但我认为在使用类型时使用单数更有意义,例如

Weekday firstDayOfWeek = Weekday.Monday;

我在某个地方读到一条建议,建议使用单数形式的正则枚举和复数形式的标志,但我想听听更多的优点和缺点。

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

一条建议来自.NET,第59-60页:

对枚举使用单数类型名称,除非其值为位 田地

public enum ConsoleColor {
  Black,
  Blue,
  Cyan,
  ...
对以位字段作为值的枚举使用复数类型名,也称为标志枚举

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

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

,我一般认为EnUM定义是一个类型定义,EnUM的值是类型可以拥有的不同的值;因此它得到了一个单数名称:

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

enum CoffeeSize { SMALL, MEDIUM, LARGE };

这是直接从Microsoft获得的:

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

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


一般来说,我认为EnUM定义是一个类型定义,其中的值是 枚举是类型可以具有的不同值;因此它得到了一个单数名称:
enum工作日{星期日、星期一、星期二、星期三、星期四、星期五、星期六}
enum CoffeeSize{SMALL,MEDIUM,LARGE}

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

struct Weekday {};

const Weekday SUNDAY;
const Weekday MONDAY;
const Weekday TUESDAY;


对于在枚举中更喜欢复数的人,你能说出
struct Weekdays

应该是枚举,而不是枚举。相关:这很重要。约定促进可读性和可维护性。个人一致性无法与传统一致性相比。如果每个库都有自己的“主观”意见,则很难保持一致。我想正如Microsoft所说的使用单数,我们都应该使用单数。不。只要你与你的多元化和单一化一致(?),这真的不重要。但实际上有什么原因吗?我们用“I”作为接口的前缀。为什么不在枚举前面加上“E”前缀,在标志前面加上“F”前缀呢。这会让事情变得非常清楚。请注意,我不喜欢在任何东西前面加前缀,但这些都是一些特殊情况,比如接口,类型永远不会改变。请注意,位字段应该是复数的。下面是MSDN枚举设计指南的最新版本:我非常感谢我读过的一本书是。基本上,它是由15位以上的作者撰写的,这些作者多年来在.NETFramework的开发中都扮演了重要角色。当他们开发框架API时,本书让你深入了解他们的思维过程,这样做会让你在浏览任何Microsoft框架、工具包等时有一种近乎千里眼的洞察力。很多(如果不是全部)文本都可以在他们的docs网站上找到,但这非常好地打包了它们。
void func (Weekday *day)
{
   if (day == &SUNDAY)
       ...
}