c#中枚举的行为

本文关键字:枚举 | 更新日期: 2023-09-27 17:49:50

 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本身?

c#中枚举的行为

在内部,enum很像struct,只有一个内部字段——与存储值的enum的基类型(这里是int)具有相同的类型。

就枚举而言,就是这样。它没有存储其他任何东西的空间——它不知道是如何构造的——是通过使用枚举中的命名值,还是通过基类型的强制转换,还是任何其他方式。

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

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


事实上,Enum.ToString()说:

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

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