ホームページ >バックエンド開発 >C++ >C# 列挙型に一意でない整数値が含まれるのはなぜですか?これを避けるべき場合は何ですか?

C# 列挙型に一意でない整数値が含まれるのはなぜですか?これを避けるべき場合は何ですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-30 01:19:11562ブラウズ

Why Can C# Enums Have Non-Unique Integer Values, and When Should I Avoid This?

一意でない列挙値

質問:

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。