为什么具有默认值的枚举在C#中无法正常工作?

Hem*_*hna 5 c# enums c#-4.0

我在C#Brain teasers http://www.yoda.arachsys.com/csharp/teasers.html上浏览了Jon skeet网站.为什么项目"Baz"在输出中显示,即使我为枚举中的所有项目声明了默认值

---例如:1

class Test
{

    enum Foo { Bar, Baz,bread, jam };

    const int One = 1;
    const int Une = 1;

    static void Main()
    {
        Foo f = 0;
        Console.WriteLine(f);
        Console.ReadLine();
    }
}
// output :Bar
Run Code Online (Sandbox Code Playgroud)

--eg2

class Test
{
    enum Foo { Bar, Baz,bread=0, jam };

    const int One = 1;
    const int Une = 1;


    static void Main()
    {
        Foo f = 0;
        Console.WriteLine(f);
        Console.ReadLine();
    }
}
//output : Bar
Run Code Online (Sandbox Code Playgroud)

--eg3

class Test
{
    enum Foo { Bar, Baz=0, bread=0, jam };

    const int One = 1;
    const int Une = 1;

    static void Main()
    {
        Foo f = 0;
        Console.WriteLine(f);
        Console.ReadLine();
    }
}
//output :Baz
Run Code Online (Sandbox Code Playgroud)

--eg4

class Test
{
    enum Foo { Bar=0, Baz=0, bread=0, jam=0};

    const int One = 1;
    const int Une = 1;


    static void Main()
    {
        Foo f = 0;
        Console.WriteLine(f);
        Console.ReadLine();
    }
}
//output:Baz
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 5

对于 .NET 来说,枚举只是整数。任何时候你将它们视为一个名称(例如 )ToString(),你实际上是在说“尝试找到一个与整数值匹配的定义的枚举标签,并告诉我它的名称”。在这种情况下,你有多个枚举标签相同的整数值,因此 which name inWriteLine未定义。请注意,WriteLine这里最终执行的是f.ToString(),它应用了上面的“查找值”逻辑。

对于--eg5,我建议:Foo f = (Foo)-1327861;在 .NET 术语中完全有效,但与任何枚举定义不匹配。没必要。