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


92

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

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

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

Weekday firstDayOfWeek = Weekday.Monday;

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


Должны быть перечисления, а не счетчики.
Рид Копси,

Ответы:


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 говорит использовать единственное число, мы ВСЕ должны использовать единственное число. Неа. Пока вы согласны со своей плюализацией и сингуляризацией (?), Это действительно не имеет значения.
Джаймал Чохан,

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.