首页 > 后端开发 > C++ > C# 中多个枚举值可以共享相同的基础值吗?

C# 中多个枚举值可以共享相同的基础值吗?

Patricia Arquette
发布: 2024-12-30 17:24:11
原创
149 人浏览过

Can Multiple Enum Values Share the Same Underlying Value in C#?

揭开非唯一枚举值的神秘面纱

在尝试混淆 EDI 文件中的索引位置时,出现了一个令人惊讶的发现:能够将多个值分配给同一个枚举。这种看似不寻常的行为引发了对其背后逻辑及其潜在影响的质疑。

事实证明,枚举本质上是继承自 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;
}
登录后复制

这表明枚举本质上是具有相同含义的常量的集合潜在价值。虽然在 C# 中禁止使用显式基类定义结构,但这正是枚举定义所翻译的内容。

因此,在同一个值中拥有多个具有相同值的常量并不存在固有冲突。枚举类型。但是,这在转换为枚举时可能会导致歧义。例如:

Color color1 = (Color)1; // Returns Red
Color color2 = (Color)Enum.Parse(typeof(Color), "1"); // Also returns Red
登录后复制

分配给 color1 和 color2 的值在技术上不是 Red,而是 1。然而,打印时,它显示为 Red。

此外,比较非唯一枚举值可能会产生令人费解的结果:

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

虽然比较在逻辑上可能看起来不正确,但它是基础值的结果相等。

最终,非唯一枚举值的使用是一个判断问题。在使用这种方法之前,仔细权衡风险和收益非常重要。

以上是C# 中多个枚举值可以共享相同的基础值吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

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