ホームページ > バックエンド開発 > C++ > C# で一意でない列挙値が許可され、代わりに構造体を使用する必要があるのはなぜですか?

C# で一意でない列挙値が許可され、代わりに構造体を使用する必要があるのはなぜですか?

Patricia Arquette
リリース: 2024-12-30 17:56:09
オリジナル
171 人が閲覧しました

Why Does C# Allow Non-Unique Enum Values, and Should I Use a Struct Instead?

一意でない列挙値

質問:

C# では、なぜコンパイラが複数の列挙型の割り当てを許可するのですか?同じ値に?このような場合、代わりに構造体を使用することをお勧めしますか?

回答:

C# の enum は、基本的に System.Enum 基本クラスから継承する構造体です。バックグラウンドで、列挙値は構造体内の定数として定義されます。たとえば、次の enum 定義:

public enum Color
{
    Red = 1,
    Blue = 1,
    Green = 1
}
ログイン後にコピー

は、次の疑似 C# コードと同等です:

public struct Color : System.Enum
{
    public const int Red = 1;
    public const int Blue = 1;
    public const int Green = 1;
}
ログイン後にコピー

同じ値を持つ複数の定数を含む型には問題がないため、一意でない値を含む列挙型を定義することは許容されます。ただし、いくつかの注意事項があります:

  1. 非一意の値: 非一意の値を持つ列挙型に変換する場合、その列挙型に割り当てられる最初の値がその値になります。戻ってきました。これは、意図した値と一致しない可能性があります。
  2. 等価比較: 一意でない列挙値を比較すると、予期しない結果が生じる可能性があります。質問の例を使用すると、赤と緑は両方とも値 1 を表すため、赤と緑を比較すると、固有の違いにもかかわらず true が返されます。

一意でない列挙値を使用することは技術的には合法です。 、一般的には落胆しました。代わりに、一意の値を持つ明示的なメンバーを定義できる構造体の使用を検討してください。ただし、構造体は列挙型と比較してメモリ オーバーヘッドが高い場合があるため、要件に基づいて慎重に使用してください。

以上がC# で一意でない列挙値が許可され、代わりに構造体を使用する必要があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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