3

私は時々enumこのようなものを見てきました:

public enum Color {
    None, Black, Red, Blue
}

次のようなコードで:

Color color;

...

if (color == Color.None) ...

null 許容列挙型を使用して、次のようにコーディングすることをお勧めします。

public enum Color {
    Black, Red, Blue
}

...

Color? color;

...

if (color == null) ...

どのスタイルが好まれますか?

4

5 に答える 5

12

いつものように、それは依存します。

[Flags]列挙型の場合、None「これらのオプションのどれも」が有用な概念であるため、ほとんどの場合、値を使用することをお勧めします。[Flags]列挙型以外の場合、概念的に明らかに有用でない限り、通常は値Noneを含めません。

とはいえ、「クラス ライブラリを開発するための設計ガイドライン」の一部としての列挙ガイドラインには、次のものが含まれます。

単純な列挙にはゼロの値を指定してください。

可能であれば、この値に None という名前を付けます。None が適切でない場合は、値 0 を最も一般的に使用される値 (デフォルト) に割り当てます。

...例には が含まNoneれていませんが、.NET フレームワークの多くの列挙型にもNone値がありません...

null 許容列挙型を使用する必要があるかどうかについては、状況によって異なります。実際には賢明な色ではないため、「値があるかもしれない、またはないかもしれない」という変数を使用します。より便利な手段を持たないこと、IMO。列挙型が他の null 非許容値型と異なるのはなぜですか? 通常、「情報がありません」の場合は 0 を使用せず、代わりに an を使用します。を処理する方法と一致する方法で列挙型を処理することをお勧めします。Color?ColorNoneNoneEnum.IsDefined(typeof(Color))int?int

(そうは言っても、私は野田時間にNone値として含めているIsoDayOfWeekことがわかります.今それを見て驚いています。)

于 2013-02-07T19:59:50.167 に答える
2

None個人的には、カラーのようなものは避けたいと思います。明らかに色ではないものはないため、意味的に正しくありません。それが起こるときはいつでもあなたは問題にぶつかります。

Setたとえば、考えられる色を想像してみてください。[ White, Black, Red ]理にかなっていますが、明らかにそうで[ White, Black, None ]はありません。

null方法などの問題を回避することもできますが、望ましいでしょうisPresent()

于 2013-02-08T00:09:13.053 に答える
1

それはあなたが与えたい意味が何であるかに依存しますNone.

nullは不明です。null は任意の色または色なしのどちらでもかまいませんが、色はわかりません。
色が知られているようにNoneのように聞こえますが、色がありません。

したがって、アプリケーションに適したものを選択してください。

于 2013-02-07T19:59:49.930 に答える
0

None以上nullNone推測することは明らかです。そして、次のように使用できますcolorObject.None。しかし、これは主観的であり、好みに基づいています。

color"null" と呼ばれるものはありませんが、no- color(透明な?) が存在する可能性があります。

于 2013-02-07T20:00:05.203 に答える