轉自: http://www.cnblogs.com/ju2ender/archive/2010/05/07/1730064.html
因為原文網頁在chrome32 下非常亂,沒辦法只好轉過來了..
首先創建一個控制台項目,我命名為Enum_Test。添加個枚舉Color,它有三個成員:Red、Blue、Green:
/// <summary> /// 顏色枚舉 /// </summary> public enum Color { /// <summary> /// 紅色 /// </summary> Red, /// <summary> /// 藍色 /// </summary> Blue, /// <summary> /// 綠色 /// </summary> 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個成員:
/// <summary> /// 顏色枚舉 /// </summary> public enum Color { /// <summary> /// 紅色 /// </summary> Red = 14, /// <summary> /// 藍色 /// </summary> Blue, /// <summary> /// 綠色 /// </summary> 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個小小的發現,你知道幾個呢?探索總是充滿了樂趣!: )