2009-08-26 3 views
54

Используете ли вы единственное или множественное число для перечислений? Я думаю, что это имеет смысл лучший с множественным числом в объявленииСингулярное или множественное число для перечислений?

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

... но я думаю, что это имеет смысл с сингулярным при использовании типа, например,

Weekday firstDayOfWeek = Weekday.Monday; 

Я прочитал рекомендацию где-то использовать сингулярное ти регулярных перечислений и множественного числа с флагами, но я хотел бы услышать еще некоторые плюсы и минусы.

+0

Должен быть перечислениями, не счетчики. –

+1

Связанные: http://stackoverflow.com/questions/338156/table-naming-dilemma-singular-vs-plural-names – harpo

ответ

58

Здесь прямо от Microsoft:

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

Используйте сингулярное имя для большинства Enum типов, но и использовать множественное имя Enum типы, которые являются битовыми полями.

+1

С учетом того, что битовые поля должны быть множественными. –

+2

Ниже приведена последняя версия Руководства MSDN для проектирования перечислений: http://msdn.microsoft.com/en-us/library/ms229058.aspx –

10

В .NET Framework большинство «нормальных» перечислений (например, DayOfWeek) имеют уникальные имена и перечисления флагов (например, StringSplitOptions, BindingFlags) имеют множественные имена. Это имеет смысл, так как значение перечисления флага может представлять несколько элементов, но для перечисления без флага, оно может представлять только один элемент.

18

Одна рекомендации исходит от .NET Framework Design Guidelines, стр 59-60:

ли использовать сингулярное имя типа для перечисления, если его значение не является битовыми поля.

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

ли использовать множественное имя типа для перечисления с битовыми полями в качестве значений, также называют флаги перечисления.

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

Это субъективное и не имеет значения, что вы используете, если вы последовательны (лично я использую в качестве единственного числа сво переносятся из моих конвенций Sql)

+8

Это имеет значение. Условения способствуют читабельности и ремонтопригодности. Личная консистенция не сравнивается с обычной согласованностью. – grenade

+1

Трудно быть последовательным, если каждая библиотека имеет свое «субъективное» мнение. –

+1

Я предполагаю, что, как говорит Microsoft, использование единственного числа, мы должны использовать единицу. Неа. Если вы согласны с вашей плюрализацией и сингуляризацией (?), Это действительно не имеет значения. –

1

В общем, я рассмотрите определение перечисления как определение типа, причем значения перечисления представляют собой разные значения, которые может иметь тип; поэтому он получает сингулярное имя:

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?