枚举在c#中的行为

时间:2012-12-28 08:56:19

标签: c# enums

 class MainClass
{
    static void Main(String[] args)
    {
        Fruits f =Fruits.Banana;
        Console.WriteLine("Fruit={0}",f);
        Console.Read();
    }

    private enum Fruits
    {
        Banana=0,
        Apple=0,
        Orange=0,
        Cherries
    }

}

上面的代码给出了输出:Fruit=Apple

如果我在enum中将Banana的值更改为0以外的任何值,则输出为Banana。我的问题是为什么在第一种情况下,输出是Apple而不是OrangeBanana本身?

2 个答案:

答案 0 :(得分:2)

为什么你甚至做那样的事情?无论如何,这是因为在内部,enum具有相同的值是按字母顺序选择的。

答案 1 :(得分:2)

在内部,枚举非常类似于具有单个内部字段的struct - 具有与枚举的基本类型相同的类型(此处为int),其存储值。

就这一点而言,就这一点而言。它没有任何其他存储空间 - 它不知道如何它的构造 - 无论是通过使用枚举中的命名值,还是通过从基类型转换,或任何其他方式。

因此,当您要求字符串表示时,它没有进一步的信息比获取数值并尝试在其枚举成员中找到与该值匹配的名称。

我不确定是否定义如果多个成员具有相同的数值,将选择哪个值,但是必须选择某些,并且它至少看起来是一致的


事实上,Enum.ToString()说:

  

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