Enum的基本类型值相同转换问题

1.Enum与int之间的转换

Enum规定:Enum的枚举成员不可以相同,但是枚举值可以相同
eg:

enum Color:sbyte
{
   red=1,
   blue = 1,
   yellow=1,
   black = 1

}

int a = 1;
Color c = (Color)a;//这个c会是其中的哪一个了?
Console.WriteLine("答案是:"+c);

你如果实验了这个代码,你会发现,他的值是 “black ”,这是为什么了?
因为当枚举成员的枚举值相同时,在进行枚举值===》枚举成员的转换时,C#代码会判断具有相同枚举值(1)得枚举成员(red,blue,yellow,black)中的变量名的字符优先级,事例中的 枚举成员:

1)首先是 ‘b’具有最高优先级,所有会从blue 和 black中选择;
2)blue 和 black 中的第二个字符,明显相同,那么比较 第三个字符,明显 a>u,那么就很容易得出,Color c = (Color)a 会让c等于“black”啦!

附上字母与数字的优先级:0>9 > A>Z > a>z

2.Enum与字符串之间的转换

  //枚举到字符串
  string colorName = Ecolor.red.ToString();
  Console.WriteLine("string colorName = Ecolor.bAack.ToString()======>" + colorName);
 //字符串到枚举
 Ecolor colorOne = (Ecolor)Enum.Parse(typeof(Ecolor), colorName);
 Console.WriteLine(colorOne);//输出为black

 //Ecolor colorTwo = (Ecolor)Enum.Parse(typeof(Ecolor), "紫色");报错因为枚举中没有此枚举成员
 //Console.WriteLine(colorTwo);

 Ecolor colorThree = (Ecolor)Enum.Parse(typeof(Ecolor), "2");
 Console.WriteLine(colorThree);//输出为black

(1)还是上面说到的字符顺序问题,其中也翻译了一个问题:

字符串到枚举的过程

Ecolor colorOne = (Ecolor)Enum.Parse(typeof(Ecolor), colorName);
首先是将 colorName转换为枚举成员的枚举值
其次在按照字符优先级,进行转换枚举成员

(2)Ecolor colorThree = (Ecolor)Enum.Parse(typeof(Ecolor), “2”);
字符优先级问题

综上所述了,我目前(2017/10/19 0:50)还是不知道枚举值可以相同有啥作用.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值