转自: http://www.cnblogs.com/ju2ender/archive/2010/05/07/1730064.html
因为原文网页在chrome32 下非常乱,没办法只好转过来了..
首先创建一个控制台项目,我命名为Enum_Test。添加个枚举Color,它有三个成员:Red、Blue、Green:
////// 颜色枚举/// public enum Color{ ////// 红色 /// Red, ////// 蓝色 /// Blue, ////// 绿色 /// Green}
为每个枚举成员添加文本注释是很有必要的,项目中,面对数个没见过的单词是一件多么痛苦的事。: (
得到枚举的值
枚举中的每个成员是有个数字值与其对应的,得到这个值的方法是:
int hashCode = Color.Red.GetHashCode();
得到枚举的名字
这个很直接:
string str = Color.Red.ToString();
现在问题出现了,如何将这两种都能代表同一枚举的表示方法互相转换呢?我们用Enum.Parse()方法,它需要两个参数,第一个是你要转换的枚举类型,这里要用typeof()方法获取该枚举的类型,而不能直接将枚举放上去,第二个是你要转换的值。
将枚举的值转换为对应的名字
int hashCode = Color.Red.GetHashCode();string enumParseStr = Enum.Parse(typeof(Color), hashCode.ToString()).ToString();
Enum.Parse()得到的值是object类型的,我们要转换的是值,得到的是名字,因此ToString()得到名字。
将枚举的名字转换为对应的值
string str = Color.Red.ToString();int enumParseInt = Convert.ToInt32(Enum.Parse(typeof(Color), str));
这里要转换的是名字,得到的是值,因此用Convert.ToInt32()得到该值。
带给你的小发现
1. 默认枚举第一个值为0,后面的依次加1
例如上面的Color枚举,是没有为其制定值的,这是Red默认为0,依次Blue为1、Green为2。
2. 指定枚举的第一个值,它后面的值会从它开始依次加1
为枚举的成员定义值时,若这些值是连续的,不用依次为每个成员都定义,而只用为第一个成员定义值即可。
3. 可以无序定义枚举值
无序的定义是允许的,例如可以为Red定义为6,而Blue为1,Green为14。
4. 第2条与第3条相结合的情况
现在为Color添加一个颜色White。现在Color有4个成员:
////// 颜色枚举/// public enum Color{ ////// 红色 /// Red = 14, ////// 蓝色 /// Blue, ////// 绿色 /// Green = 9, White}
先只为Green定义值9,其他3个均为默认,这时,Green后面的White值为9加1,是10。这时Red为0, Blue为1。
再将Red定义为14,Green定义为9,其他均为默认。这时,Blue为14加1,White的值为9加1。
这4个小小的发现,你知道几个呢?探索总是充满了乐趣!: )