0

列挙型は通常、ある種のオブジェクト モデルなどで、クラスの特定のプロパティの状態を定義するために使用されます。これらのプロパティの一部では、「このプロパティは設定されていません」という状態が有効です。

このような状況では、ゼロのNone列挙値を使用するか、プロパティ タイプを null 可能にする必要がありますか?

public MyEnum Property { get; set; }

public enum MyEnum {
    None = 0,
    Value1,
    Value2
}

また

public MyEnum? Property { get; set; }

public enum MyEnum {
    Value1,
    Value2
}
4

4 に答える 4

6

使用MyEnum.None- はるかに表現力があり、MyEnum.Invalid意味を伝えることさえできます。

0 以外の値に設定することもできます。これは int に基づいているため、-1 に設定し、最初の有効な値を 1 に設定できます。

public enum MyEnum {
    InvalidValue = -1,
    Value1 = 1,
    Value2
}

コードでは、渡されたこの値を簡単にチェックして、説明的な例外をスローできます。

null 許容の列挙型は想定されておらず、表現力が低くなっています。コードのユーザーがこれを認識し、null をチェックする必要があります。

于 2010-08-25T14:58:03.290 に答える
0

もう1つのオプションは、最初の値が最初は0になるため、最初の値を1に設定することです。

public enum MyEnum {
    Value1 = 1,
    Value2
}

私はあなたの両方の状況が受け入れられると思います!それはあなたの状況に依存します。ユーザーインターフェイスを使用する場合、「なし」の値を使用した最初の例の方がおそらく使いやすいでしょ。ただし、Nullableは、変数の使用方法に関する詳細情報を提供します。

于 2010-08-25T15:00:20.460 に答える
0

これに決定的に答えるのは難しいです。アプリの多くの要因がこれに影響します。列挙型の値を 0 に定義するだけで、列挙型にゼロ値を指定しない傾向があります。

enum Foo 
{
   A = 1,
   B = 2
}

...

Foo myFoo = (Foo)0;

これにより、列挙型を汚染することなく、センチネル値の利点が得られます。

于 2010-08-25T14:58:39.963 に答える
0

null 許容列挙型の代わりに「None」値を使用します。他に何もないとしても、私にとってif(Property == MyEnum.None)は よりもはるかに読みやすいですif(Property == null)

于 2010-08-25T14:58:44.117 に答える