【发布时间】:2014-09-08 05:28:29
【问题描述】:
我在 C# 中练习枚举,但我无法理解这些的输出
void Main()
{
MyEnum a = MyEnum.Top;
Console.WriteLine(a);
}
对于这个测试,我的枚举和输出是
enum MyEnum
{
Left, Right, Top, Bottom // Top
}
enum MyEnum
{
Left, Right, Top = 0, Bottom // Left
}
我认为在朗姆酒时间程序选择第一个值为 0 的项目,为了确认这一点,我将值 0 分配给底部
enum MyEnum
{
Left, Right, Top = 0, Bottom = 0 // Bottom
}
然后我想也许程序选择了值为 0 的第一项但按字母顺序搜索 所以我将 Top 改为 ATop 并更改了测试用例
void Main()
{
MyEnum a = MyEnum.ATop;
Console.WriteLine(a);
}
enum MyEnum
{
Left, Right, ATop = 0, Bottom = 0 // Bottom
}
enum MyEnum
{
Left, Right, ATop = 0, Bottom // Left
}
我知道没有人以这种方式使用枚举,但我想知道枚举的这种特殊行为。
【问题讨论】:
-
但是为什么当我将相同的值分配给 3 个枚举时输出会发生变化(我假设左侧自动分配 0,我明确分配 2)
-
好吧,通过拥有多个具有相同枚举值的枚举值,您可以使这些值彼此无法区分。如果您尝试打印值的名称,则会输入未定义的行为区域,这意味着实现可以免费为您提供任何相关名称。为什么它选择一个而不是另一个是一个实现细节,并且可能随时改变。
-
返回哪个枚举名称是未记录的行为,see my answer here。
-
这确实是朗姆酒时间问题;p @LasseV.Karlsen