非唯一枚举值
问题:
为什么 C# 允许多个枚举值被分配相同的基础整数值?为此目的使用枚举是否安全,还是应该使用结构体?
答案:
与普遍看法相反,C# 中的枚举并不是特殊的类型,而是派生自 System.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,这可能会令人困惑。
虽然它使用具有非唯一值的枚举是合法的,建议仅在有意义时才使用它们。如果您需要唯一值,请考虑使用结构体或字典
以上是为什么 C# 枚举可以具有非唯一整数值,何时应避免这种情况?的详细内容。更多信息请关注PHP中文网其他相关文章!