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
而不是Orange
或Banana
本身?
在内部,enum很像struct
,只有一个内部字段——与存储值的enum的基类型(这里是int
)具有相同的类型。
就枚举而言,就是这样。它没有存储其他任何东西的空间——它不知道是如何构造的——是通过使用枚举中的命名值,还是通过基类型的强制转换,还是任何其他方式。
因此,当您请求字符串表示形式时,除了获取数值并尝试在其枚举成员中查找与该值匹配的名称外,它没有进一步的信息可继续。
我不确定它是否定义哪个值将被选中,如果多个成员有相同的数值,但它必须选择一些,并且它至少看起来是一致的
事实上,Enum.ToString()
说:
如果多个枚举成员具有相同的基础值,并且您尝试根据其基础值检索枚举成员名称的字符串表示形式,则代码不应该对该方法将返回哪个名称进行任何假设。
你为什么要做这种事?无论如何,这是因为内部,具有相同值的enum
s是按字母顺序选择的。