Единственное или множественное число для перечислений? - PullRequest
71 голосов
/ 26 августа 2009

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

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

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

Weekday firstDayOfWeek = Weekday.Monday;

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

Ответы [ 8 ]

74 голосов
/ 26 августа 2009

Вот прямо из Microsoft:

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

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

22 голосов
/ 26 августа 2009

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

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

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

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

[Flags]
public enum ConsoleModifiers {
  Alt,
  Control,
  Shift
}
11 голосов
/ 26 августа 2009

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

3 голосов
/ 24 ноября 2010

В общем, я считаю определение enum определением типа со значениями enum - это различные значения, которые может иметь тип; поэтому он получает единственное имя: 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 голосов
/ 26 августа 2009

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

1 голос
/ 26 августа 2009

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

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

enum CoffeeSize { SMALL, MEDIUM, LARGE };
0 голосов
/ 18 сентября 2017

Как и в соглашении C # / Microsoft, перечисления в Java должны быть единственными: http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html

0 голосов
/ 26 августа 2009

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

...