ホームページ > バックエンド開発 > C++ > C# では、複数の列挙値が同じ基になる値を共有できますか?

C# では、複数の列挙値が同じ基になる値を共有できますか?

Patricia Arquette
リリース: 2024-12-30 17:24:11
オリジナル
149 人が閲覧しました

Can Multiple Enum Values Share the Same Underlying Value in C#?

一意でない列挙値の謎を明らかにする

EDI ファイル内のインデックス位置を難読化しようとしたときに、驚くべき発見が行われました。同じ列挙型に複数の値を割り当てる機能。この一見異常な動作は、その背後にあるロジックとその潜在的な影響について疑問を引き起こしています。

Enum は、本質的には System.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;
}
ログイン後にコピー

これは、enum が本質的に同じ定数のコレクションであることを明らかにします。根底にある価値観。 C# では、明示的な基本クラスを使用して構造体を定義することは禁止されていますが、これはまさに enum 定義に変換されるものです。

その結果、同じ値を持つ複数の定数を 1 つのクラスに含めることに本質的な競合はありません。列挙型。ただし、これにより列挙型に変換する際に曖昧さが生じる可能性があります。例:

Color color1 = (Color)1; // Returns Red
Color color2 = (Color)Enum.Parse(typeof(Color), "1"); // Also returns Red
ログイン後にコピー

color1 と color2 の両方に割り当てられた値は、技術的には Red ではなく 1 ですが、印刷されると Red として表示されます。

さらに、非一意の列挙型を比較す​​ると、値は不可解な結果をもたらす可能性があります:

bool b = Color.Red == Color.Green; // True (Red is Green??)
ログイン後にコピー

この比較は論理的に間違っているように見えるかもしれませんが、それは基礎となる値が次のとおりであることの結果です。等しい。

最終的に、一意でない列挙値の使用は判断の問題です。このアプローチを利用する前に、リスクとメリットを慎重に比較検討することが重要です。

以上がC# では、複数の列挙値が同じ基になる値を共有できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート