首页 >后端开发 >C++ >为什么 C# 枚举可以具有非唯一整数值​​,何时应避免这种情况?

为什么 C# 枚举可以具有非唯一整数值​​,何时应避免这种情况?

Barbara Streisand
Barbara Streisand原创
2024-12-30 01:19:11544浏览

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

非唯一枚举值

问题:

为什么 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn