首页 > 后端开发 > C++ > 为什么 C# 允许非唯一枚举值,我应该使用结构体吗?

为什么 C# 允许非唯一枚举值,我应该使用结构体吗?

Patricia Arquette
发布: 2024-12-30 17:56:09
原创
171 人浏览过

Why Does C# Allow Non-Unique Enum Values, and Should I Use a Struct Instead?

非唯一枚举值

问题:

在 C# 中,为什么编译器允许分配多个枚举为相同的值?在这种情况下是否建议使用结构体?

答案:

C# 中的枚举本质上是一个继承自 System.Enum 基类的结构体。在幕后,枚举值被定义为结构中的常量。例如,以下枚举定义:

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

相当于以下伪 C# 代码:

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

因为包含多个具有相同值的常量的类型没有问题,使用非唯一值定义枚举是允许的。但是,它有一些警告:

  1. 非唯一值: 当转换为具有非唯一值的枚举时,分配给枚举的第一个值将是回来了。这可能与预期值不一致。
  2. 相等比较:比较非唯一枚举值可能会导致意外结果。使用问题中的示例,红色和绿色都代表值 1,因此将红色与绿色进行比较将返回 true,尽管它们存在固有差异。

虽然使用非唯一枚举值在技术上是合法的,一般不鼓励。相反,请考虑使用结构,它允许您定义具有唯一值的显式成员。但是,与枚举相比,结构可能具有更高的内存开销,因此请根据您的要求明智地使用它们。

以上是为什么 C# 允许非唯一枚举值,我应该使用结构体吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

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