Единственное или множественное число для перечислений?

92

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

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

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

Weekday firstDayOfWeek = Weekday.Monday;

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

Ян Аагард
источник
Должны быть перечисления, а не счетчики.
Рид Копси,
1
Связанный: stackoverflow.com/questions/338156/…
harpo

Ответы:

92

Вот оно прямиком от Microsoft:

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

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

Мэтт Руве
источник
1
Обратите внимание, что битовые поля должны быть во множественном числе.
М. Дадли
2
Вот последняя версия рекомендаций MSDN по проектированию перечисления: msdn.microsoft.com/en-us/library/ms229058.aspx
Родни С. Фоли,
Одна книга, которую я очень благодарен за то, что я прочитал, - это Руководство по разработке каркаса . В основном он написан более чем 15 авторами, которые на протяжении многих лет играли большую роль в разработке .NET Framework. Книга дает вам представление об их мыслительном процессе, когда они разрабатывают API-интерфейсы фреймворка, и тем самым делает вас пограничным ясновидящим, когда дело доходит до навигации по любому фреймворку, инструментарию Microsoft и т. Д. Многие, если не весь текст, можно найти в их docs, но это очень красиво упаковано.
однобокий
30

Одна рекомендация взята из Руководства по проектированию .NET Framework , стр. 59-60:

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

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

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

[Flags]
public enum ConsoleModifiers {
  Alt,
  Control,
  Shift
}
Майкл Петротта
источник
13

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

Мехрдад Афшари
источник
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?

Педро Алвес
источник
2

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

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

enum CoffeeSize { SMALL, MEDIUM, LARGE };
Ави
источник
2

Microsoft рекомендует использовать для перечислений единственное имя, если не используется Flagsатрибут. И, как указано в книге Framework Design Guidelines, вы не должны добавлять к именам перечислимых типов суффиксы Enum, Flags и т. Д., А также не должны добавлять к значениям перечисления префикс с аббревиатурой или акронимом, как это было обычно с перечислениями VB в те времена.

Брайан Гидеон
источник
Но есть ли на самом деле причина? Мы добавляем к интерфейсам префикс «I». Почему бы не префиксовать перечисления буквой «E» и флагами буквой «F». Это сделало бы это кристально ясным. Обратите внимание, что я не люблю добавлять какие-либо префиксы, но это особые случаи, такие как интерфейс, где тип никогда не изменится.
0

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

Джаймал Чохан
источник
11
Это имеет значение. Условные обозначения способствуют удобочитаемости и удобству обслуживания. Личная последовательность не идет ни в какое сравнение с обычной последовательностью.
граната
1
Трудно быть последовательным, если у каждой библиотеки есть свое «субъективное» мнение.
Пол Биггар,
1
Я предполагаю, что, как Microsoft говорит использовать единственное число, мы ВСЕ должны использовать единственное число. Неа. Пока вы согласны со своей плюализацией и сингуляризацией (?), Это действительно не имеет значения.
Джаймал Чохан,