は、構造体とは異なり、名前が付いた定数のセットを表す軽量値に分類されます。ただし、質問が提示するのは、列挙が複数の値を同じ定数に割り当てることができるように見えるという興味深い観察です。舞台裏では、EnumsはSystem.Enum Base Classに由来し、基本的に定義された定義値を持つ構造体です。 { 赤= 1、 青= 1、 緑= 1 }
clrは、この宣言を次のように内部的に解釈します:
public struct color:system.enum { public const int red = 1; public const int blue = 1; public const int green = 1; }
C#は、structの明示的な基本クラス宣言を禁止していますが、CLRは酵素のこの表現を生成します。ただし、この非統一値の割り当ては、列挙タイプへの変換中に予期しない動作をもたらす可能性があります。 color color2 =(color)enum.parse(typeof(color)、 "1");
public enum Color { Red = 1, Blue = 1, Green = 1 }Color1とcolor2の両方が赤い値に設定されます。技術的には、Color1もColor2も赤く割り当てられていません。むしろ、それらは値1を保持します。しかし、表示されると、赤はあなたが見るものです。 bool b = color.red == color.green;
この平等は、赤と緑の両方の根本的な数値が1であるために当てはまります。この非ユニーク性が、列挙設計の意図された目的とセマンティクスと一致するかどうかを判断することが不可欠です。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3