2009-08-26 18 views
54

Czy używasz liczby pojedynczej lub liczby mnogiej do wyliczenia? Myślę, że to sprawia, że ​​najlepszym znaczeniu z mnogiej w deklaracjiPojedyncze lub mnogie dla wyliczenia?

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

... ale myślę, że więcej sensu z pojedynczej przy użyciu typu, na przykład

Weekday firstDayOfWeek = Weekday.Monday; 

Czytałem zalecenie gdzieś używać liczby pojedynczej pokojowe regularnych teksty stałe i mnogiej z flagami, ale chciałbym usłyszeć jakieś kolejne plusy i minusy.

+0

Powinny być wyliczenia, nie rachmistrzów. –

+1

Powiązane: http://stackoverflow.com/questions/338156/table-naming-dilemma-singular-vs-plural-names – harpo

Odpowiedz

58

Tu jest prosto z Microsoft:

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

Użyj osobliwą nazwę dla większości Enum typów, ale użyć liczby mnogiej nazwę Enum typy, które są polami bitowymi.

+1

Z uwagą, że pola bitowe powinny być pluralizowane. –

+2

Oto najnowsza wersja Wytycznych MSDN do projektowania wyliczeniowego: http://msdn.microsoft.com/en-us/library/ms229058.aspx –

10

W .NET Framework, większość "normalnych" wyliczeń (na przykład DayOfWeek) ma pojedyncze nazwy i oznaczenia flag (na przykład StringSplitOptions, BindingFlags) mają nazwy w liczbie mnogiej. Ma to sens, ponieważ wartość wyliczenia flagi może reprezentować wiele elementów, ale dla wyliczenia niezalogowanego, może reprezentować tylko jeden element.

18

Jeden zalecenie pochodzi z .NET Framework Design Guidelines, strony 59-60:

Czy korzystanie osobliwy nazwa typu na wyliczenie, chyba że jej wartości są bitowe pola.

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

Czy w liczbie mnogiej rodzaju na wyliczenie z bitowych dziedzinach jak wartości, zwany także flagi enum.

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

To subiektywne i nie ma znaczenia to, czego używasz, tak długo, jak jesteś konsekwentny (osobiście używam pojedynczej jak jego przeniesienie z moich konwencji SQL)

+8

To ma znaczenie. Konwencje promują czytelność i łatwość konserwacji. Osobista konsystencja nie ma porównania z konwencjonalną konsystencją. – grenade

+1

Trudno zachować spójność, jeśli każda biblioteka ma własną "subiektywną" opinię. –

+1

Domyślam się, że Microsoft mówi używaj pojedynczej, powinniśmy WSZYSTKIE używać pojedynczej. Nie. Tak długo jak jesteś konsekwentny z twoją plujką i singularizacją (?), To naprawdę nie ma to znaczenia. –

1

W ogóle uznać definicję wyliczeniową za definicję typu, przy czym wartości wyliczenia to różne wartości, jakie może mieć typ; Dlatego robi się pojedyncza nazwa:

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

enum CoffeeSize { SMALL, MEDIUM, LARGE }; 
2

Microsoft recommends przy użyciu pojedynczej nazwy dla wyliczeń, chyba że używa atrybutu Flags. Zgodnie z podręcznikiem Framework Design Guidelines nie należy dodawać nazw typów wyliczeń za pomocą Enum, flag itp. I nie należy dodawać wartości wyliczeniowych skrótem ani akronimem, tak jak to było w przypadku wyliczeń VB w danym dniu.

+0

Ale czy istnieje właściwie powód, dla którego? Przedrostki łączymy z "I". Dlaczego nie prefiksować enums z "E" i flagami z "F". To by uczyniło to krystalicznie czystym. Zauważ, że nie lubię prefiksowania czegokolwiek innego, ale są to specjalne przypadki, takie jak interfejs, w którym typ nigdy się nie zmieni. –

2

Ogólnie uważam definicję wyliczeniową za definicję typu, przy czym wartościami wyliczenia są różne wartości, jakie może mieć typ; dlatego dostaje osobliwą nazwę: enum Weekday { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }; enum CoffeeSize { SMALL, MEDIUM, LARGE };

Tak.Jeśli wykonujesz mentalne doświadczenie w implementacji wyrażeń jako klas, wówczas fakt, że użyjesz pojedynczej nazwy dla typu, powinien ujawnić, że jest to ma sens, aby używać pojedynczych nazw dla takich wyliczeń. Np

struct Weekday {}; 

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

...

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

Bo kto preferuje liczby mnogiej w teksty stałe, należy wymienić, że struct Weekdays?

Powiązane problemy