2009-08-26 68 views
54

你使用單數還是複數來枚舉?我想有最好的意義與複數的聲明枚舉的單數還是複數?

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

...但我認爲它使用的類型時,例如使用奇異更有意義

Weekday firstDayOfWeek = Weekday.Monday; 

我讀的推薦的地方使用奇異蒙山經常枚舉和旗子複數,但我想聽到更多的優點和缺點。

+0

應該是枚舉,不枚舉。 – 2009-08-26 16:30:07

+1

相關:http://stackoverflow.com/questions/338156/table-naming-dilemma-singular-vs-plural-names – harpo 2009-08-26 16:37:08

回答

58

這是直接從微軟:

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

用於大多數枚舉 類型的單數名稱,但對於枚舉 用複數名類型是位域。

+1

注意位字段應該複數化。 – 2010-08-20 15:48:02

+2

以下是枚舉設計MSDN指南的最新版本:http://msdn.microsoft.com/en-us/library/ms229058.aspx – 2012-06-07 20:57:48

10

在.NET Framework中,大多數「普通」枚舉(例如DayOfWeek)具有單數名稱和標誌枚舉(例如StringSplitOptions,BindingFlags)具有複數名稱。這是有道理的,因爲標誌枚舉的值可以表示多個項目,但對於非標誌枚舉,它只能表示單個項目。

18

一個建議來自59-60的.NET Framework Design Guidelines,頁:

使用單一類型名稱枚舉,除非它的值是位 領域。

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

使用多種類型的名稱與位域作爲值枚舉,也稱爲標誌枚舉。

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

這是主觀的,不要緊,你用什麼,只要你是一致的(我個人使用單數的距離我的SQL約定結轉)

+8

它確實很重要。公約促進了可讀性和可維護性。個人一致性不與傳統一致性相比較。 – grenade 2009-08-26 16:38:01

+1

如果每個圖書館都有自己的「主觀」意見,很難保持一致。 – 2009-08-26 16:38:54

+1

我想微軟說使用單數,我們應該使用單數。不。只要你符合你的泛化和單化(?),那真的沒關係。 – 2009-08-26 16:46:47

1

一般情況下,我考慮一個枚舉定義是一個類型定義,其中enum的值是類型可以具有的不同值;因此,它得到一個奇異的名字:

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

enum CoffeeSize { SMALL, MEDIUM, LARGE }; 
2

Microsoft recommends使用單數名稱進行枚舉,除非它使用Flags屬性。從框架設計指南書中可以看出,您不應該使用Enum,Flags等後綴枚舉類型名稱,也不應該在枚舉值前加上縮寫或首字母縮寫詞,就像當天VB枚舉中常見的枚舉值一樣。

+0

但是,實際上有一個原因爲什麼?我們用'I'作爲接口的前綴。爲什麼不將前綴用'E'和用'F'前綴來標記。這會讓它變得清晰。請注意,我不喜歡在其他任何地方添加前綴,但是這些是特殊情況,例如類型永遠不會更改的界面。 – 2009-09-07 20:10:15

2

一般來說,我認爲一個枚舉定義是一種類型的定義,與 枚舉爲不同值的類型可以具有的值;因此,它得到一個奇異的名字: 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