首页 > 后端开发 > C++ > C# 中的枚举可以保存具有相同基础常量的多个值吗?这有什么含义?

C# 中的枚举可以保存具有相同基础常量的多个值吗?这有什么含义?

Susan Sarandon
发布: 2025-01-03 02:12:37
原创
152 人浏览过

Can Enums in C# Hold Multiple Values with the Same Underlying Constant, and What are the Implications?

枚举声明中的多个值:深入了解 CLR

与结构不同,枚举被归类为表示集合的轻量级值类型命名常量。然而,问题提出的是一个有趣的观察,即枚举似乎允许将多个值分配给同一个常量。

深入研究公共语言运行时 (CLR) 的实现细节,很明显枚举本质上与结构类似。在幕后,枚举派生自 System.Enum 基类,本质上是具有预定义常量值的结构。

考虑示例枚举声明:

public enum Color
{
    Red = 1,
    Blue = 1,
    Green = 1
}
登录后复制

CLR 在内部解释此声明如下:

public struct Color : System.Enum
{
    public const int Red = 1;
    public const int Blue = 1;
    public const int Green = 1;
}
登录后复制

虽然 C# 禁止对结构进行显式基类声明,但 CLR 仍然生成此枚举的表示。

枚举类型中存在具有相同值的多个常量不会造成问题。但是,这种非唯一的赋值可能会导致在转换为枚举类型期间出现意外行为。

例如:

Color color1 = (Color)1;
Color color2 = (Color)Enum.Parse(typeof(Color), "1");
登录后复制

color1 和 color2 都将设置为 Red 值,因为第一个赋值是任意的。从技术上讲,颜色 1 和颜色 2 都没有指定为红色;相反,它们的值是 1。但是当显示时,您将看到红色。

此外,非唯一枚举值之间的比较操作可能会产生令人惊讶的结果:

// true (Red is Green??)
bool b = Color.Red == Color.Green;
登录后复制

这个等式成立,因为红色和绿色的基础数值都是 1。

虽然这种行为本质上没有问题,但在使用时值得考虑具有非唯一值的枚举。确定这种非唯一性是否符合枚举设计的预期目的和语义至关重要。

以上是C# 中的枚举可以保存具有相同基础常量的多个值吗?这有什么含义?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板