C# 中的枚举值确定算法在示例中是如何工作的?
主要代码:
void Main()
{
Numbers number;
number = Numbers.Four;
Console.WriteLine((int) number);
Console.WriteLine(number);
Console.WriteLine(Numbers.Four);
}
示例 1:
enum Numbers {
One,
Two,
Three,
Four = 1,
Five,
Six
}
将四的值设置为 1
执行结果是:
1 四 四
如果你反编译,你可以看到以下内容:
private enum Numbers
{
One = 0,
Two = 1,
Three = 2,
Four = 1,
Five = 2,
Six = 3
}
示例 2
enum Numbers {
One,
Two,
Three,
Four = 2,
Five,
Six
}
为四设置值 2
执行结果是:
2 三 三
反编译后是这样的:
private enum Numbers
{
One = 0,
Two = 1,
Three = 2,
Four = 2,
Five = 3,
Six = 4
}
为什么在第一个例子中选择了最后一个匹配值,而在第二个例子中选择了第一个匹配值?
如果你没有显式地赋值,那么它们将被初始化为从零开始的值。
在幕后,枚举是一个带有常量的结构体:
我可能错了,但在我看来,如果 enum 中存在非唯一值,则无法保证它们返回的顺序,并且这种方法应该仅在确实需要的情况下使用。例如,MessageBoxIcon具有相同的值(很可能是为了向后兼容)并且(实际上)没有什么可担心的。但是,如果我们以您的示例为例,事实证明
Numbers.Two == Numbers.Four, 这不符合语义。最好总是明确指定枚举值。
在 SO 上找到了答案。
问答链接:如果Enum值相同,我会得到哪个Enum常量
文档(来电者须知)说:
另外,从关于 SO 的答案