34

定数を持つ構造体:

public struct UserType
{
  public const int Admin=1;
  public const int Browser=2;
  public const int Operator=3;
}

そして今、同じ目的のために列挙型を使用しましょう:

public enum UserType
{
  Admin=1,
  Browser,
  Operator
}  

両方ともスタックに割り当てられます。どちらの場合も、UserType.Adminと言います。構造体の方法では、基になる値を取得するためにintにキャストする必要はありません.enumバージョンでは、3つの値のうち1つだけが使用されることが保証されていますが、構造体バージョンでは、任意の整数を使用できます使用されます。これは、Int32.MinValueとInt32.MaxValueの間の任意の値を意味します。これ以外に列挙型を優先する他の利点はありますか?

4

2 に答える 2

37

これ以外に列挙型を優先する他の利点はありますか?

明快さ。

これらの3つの値のいずれかを常に持つフィールドまたはメソッドパラメータがあるとします。列挙型にすると、次のようになります。

  • 誤って任意の整数値を割り当てることはできません。(意図的にint任意の値を列挙型にキャストできますが、明示的にキャストする必要があります。)
  • その価値がどのような情報を表すのかは明らかです

これらは、将来保守が容易なコードを作成する上で非常に重要な利点です。達成しようとしていることをコードに自然に記述させることができれば、それだけ良い結果が得られます。

于 2012-11-17T09:05:31.607 に答える
9

列挙型は、リフレクションなしで文字列または数値から検索できます。例:

// VERY important when using ORMs, as databases usually use an int
UserType ut = (UserType)2; 

// Useful when parsing config files like appSettings.
UserType utf = (UserType)Enum.Parse(typeof(UserType),"Admin");

フレームワークでは、列挙型を使用した一般的な操作をより高速にするために、さらに多くのことが行われています。もう1つは、ビットフィールドのFlagsAttributeです。これは、constintでは簡単に実行できません。

GetNamesやGetValuesなどのその他のヘルパー関数については、 Enumクラスのメンバーを確認してください。

于 2012-11-17T09:08:26.567 に答える