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”);
字符优先级问题