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

Используете ли вы единственное или множественное число для перечислений? Я думаю, что это имеет смысл с множественным числом в декларации

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

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

Weekday firstDayOfWeek = Weekday.Monday;

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

Ответ 1

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

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

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

Ответ 2

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

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

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

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

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

Ответ 3

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

Ответ 4

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

Ответ 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?

Ответ 6

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

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

enum CoffeeSize { SMALL, MEDIUM, LARGE };

Ответ 8

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