108

列挙に単数または複数を使用しますか? 宣言で複数形を使用するのが最も理にかなっていると思います

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

...しかし、型を使用する場合は単数の方が理にかなっていると思います。

Weekday firstDayOfWeek = Weekday.Monday;

通常の列挙型で単数形を使用し、フラグを使用して複数形を使用するという推奨事項をどこかで読みましたが、さらに長所と短所を聞きたいです。

4

7 に答える 7

107

ここにそれはマイクロソフトから直接です:

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

ほとんどの列挙型には単数形の名前を使用しますが、ビットフィールドである列挙型には複数形の名前を使用します。

于 2009-08-26T16:32:52.550 に答える
35

推奨事項の 1 つは、.NET Framework の設計ガイドラインの 59 ~ 60 ページから得られます。

値がビット フィールドでない限り、列挙には単数型名を使用してください。

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

ビット フィールドを値として持つ列挙型 (フラグ列挙型とも呼ばれる) には、複数形の型名を使用してください。

[Flags]
public enum ConsoleModifiers {
  Alt,
  Control,
  Shift
}
于 2009-08-26T16:30:45.173 に答える
15

.NET Framework では、ほとんどの "通常の" 列挙型 (例: ) は単数形の名前を持ち、DayOfWeekフラグ列挙型 (例: ) は複数形の名前を持ちます。フラグ列挙型の値は複数のアイテムを表すことができますが、非フラグ列挙型の場合は単一のアイテムしか表すことができないため、これは理にかなっています。StringSplitOptionsBindingFlags

于 2009-08-26T16:28:43.540 に答える
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誰ですか?

于 2010-11-24T10:16:31.807 に答える
2

一般に、列挙型の定義は型の定義であると考えています。列挙型の値は、型が持つことができるさまざまな値です。したがって、それは単数の名前を取得します:

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

enum CoffeeSize { SMALL, MEDIUM, LARGE };
于 2009-08-26T16:32:21.020 に答える
2

Microsoftは、属性を使用しない限り、列挙に単一の名前を使用することをお勧めFlagsします。また、フレームワーク設計ガイドラインの本から引用したように、列挙型名の前にEnum、Flagsなどを付けたり、当時のVB列挙で一般的だったように、列挙値の前に省略形や頭字語を付けたりしないでください。

于 2009-08-26T16:35:07.833 に答える
0

それは主観的なものであり、一貫性がある限り、何を使用しても問題ありません (個人的には、SQL 規則からのキャリーオーバーとして、singular を使用します)。

于 2009-08-26T16:31:17.717 に答える