在枚举声明中的多个值:更深入地深入clr
探究了通用语言运行时(CLR)的实现细节,很明显枚举与结构基本上相似。在幕后,枚举源自System.Enum Base类,本质上是具有预定恒定值的结构。考虑示例枚举声明:当C#禁止对结构的显式基类声明,但CLR仍为枚举生成此表示。
在枚举类型中具有相同值的多个常数的存在并不构成问题。但是,这种非唯一的价值分配可能会导致转换为枚举类型时出乎意料的行为。 color color2 =(color)enum.parse(typeof(color),“ 1”);color1和color2都将设置为红色值,因为第一个值分配是任意的。从技术上讲,color1和color2均未分配红色;相反,它们保存值1。但是当显示时,红色就是您会看到的。
此外,非唯一的枚举值之间的比较操作可能会产生令人惊讶的结果:这个公平是正确的,因为红色和绿色的基础数值均为1。
虽然本质上是有问题的,但在使用非偶然值的枚举时,它会保证考虑枚举时的考虑。必须确定这种非唯一性是否与您的枚举设计的预期目的和语义相吻合。免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3