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

来源:互联网 发布:2012大学生就业率数据 编辑:程序博客网 时间:2024/06/03 19:41

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)还是不知道枚举值可以相同有啥作用.

原创粉丝点击