枚举类型的值

Mus*_*ici 28 c# enums

我只是想知道为什么我得到这个输出:

enum MyEnum
{
    a=1,
    b=2,
    c=3,
    d=3,
    f=d
}
Console.WriteLine(MyEnum.f.ToString());
Run Code Online (Sandbox Code Playgroud)

输出
c


但在Mono
OUTPUT
f

那么为什么输出c?不是吗?编译器如何选择c?如果我改变这样的代码:

enum MyEnum
{
    a=1,
    b=2,
    c=3,
    d=3, 
    k=3
}
Console.WriteLine(MyEnum.k.ToString());
Run Code Online (Sandbox Code Playgroud)


再次输出
c
!

另一个例子:

enum MyEnum
{
    a=3,
    b=3,
    c=3,      
    d=3,
    f=d,   
}
MessageBox.Show(MyEnum.f.ToString());
Run Code Online (Sandbox Code Playgroud)

输出
c

小智 36

来自MSDN:

如果多个枚举成员具有相同的基础值,并且您尝试根据其基础值检索枚举成员名称的字符串表示形式,则您的代码不应对该方法将返回的名称做出任何假设.

请参阅:http://msdn.microsoft.com/en-us/library/a0h36syw.aspx#Y300

  • 选择枚举名称的明显随机性是因为没有`[Flags]`属性的枚举的`ToString()`使用**二进制搜索**来有效地查找具有指定值的第一个枚举名称. (9认同)