一意でない列挙値
質問:
C# ではなぜ複数の列挙値が許可されるのですか同じ基礎となる整数値が割り当てられるでしょうか?この目的で列挙型を使用するのは安全ですか? それとも代わりに構造体を使用する必要がありますか?
答え:
一般に信じられていることに反して、C# の列挙型は特別なものではありません。型ですが、System.Enum から派生した構造体です。 enum を宣言すると、コンパイラは enum 値の名前付き定数を含む構造体を生成します。
enum 定義:
public enum Color { Red = 1, Blue = 1, Green = 1 }
は次のように変換されます:
public struct Color : System.Enum { public const int Red = 1; public const int Blue = 1; public const int Green = 1; }
構造体は同じ値を持つ複数の定数を持つことができるため、一意でない値を持つ列挙型を定義することが可能です。ただし、これは列挙型に変換するときに不一致を引き起こす可能性があります。
Color color1 = (Color)1; // Returns Red Color color2 = (Color)Enum.Parse(typeof(Color), "1"); // Also returns Red
比較 Color.Red == Color.Green も true と評価され、混乱を招く可能性があります。
一意でない値を持つ列挙型を使用することは合法ですが、意味がある場合にのみ使用することをお勧めします。一意の値が必要な場合は、構造体または Dictionary
以上がC# 列挙型に一意でない整数値が含まれるのはなぜですか?これを避けるべき場合は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。