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

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

Patricia Arquette
Patricia Arquette原创
2024-12-30 17:56:09174浏览

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

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