繁体   English   中英

枚举在c#中的行为

[英]Behaviour of enum in c#

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

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

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

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

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

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


事实上, Enum.ToString()说:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM