1
 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

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

4

2 回答 2

2

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

于 2012-12-28T08:58:48.500 回答
2

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

就是这样,就枚举而言。它没有存储任何其他东西 - 它不知道它是如何构造的 - 无论是通过使用来自枚举的命名值,还是通过从基类型进行强制转换,或任何其他方式。

因此,当您请求字符串表示时,除了获取数值并尝试在其枚举成员中找到与该值匹配的名称外,没有其他信息可以继续。

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


事实上,Enum.ToString()说:

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

于 2012-12-28T09:05:55.657 回答