一、 定義
1、每個枚舉成員均具有相關聯的常數值。此值的類型就是包含了它的那個枚舉的基礎類型。每個枚舉成員的常數值必須在該枚舉的基礎類型的範圍之內。樣本
enum Color: uint
{ Red = -1, Green = -2, Blue = -3 }
產生編譯時間錯誤,原因是常數值 -1、-2 和 –3 不在基礎整型 uint 的範圍內。
2、枚舉預設類型是int,從0開始
3、多個枚舉成員可以共用同一個關聯值。樣本
enum Color
{ Red, Green, Blue, Max = Blue }
顯示一個枚舉,其中的兩個枚舉成員(Blue 和 Max)具有相同的關聯值。
4、一個枚舉成員的關聯值或隱式地、或顯式地被賦值。如果枚舉成員的聲明中具有“常數運算式”初始值設定項,則該常數運算式的值(它隱式轉換為枚舉的基礎類型)就是該枚舉成員的關聯值。如果枚舉成員的聲明不具有初始值設定項,則它的關聯值按下面規則隱式地設定:
5、如果枚舉成員是在枚舉類型中聲明的第一個枚舉成員,則它的關聯值為零。 否則,枚舉成員的關聯值是通過將前一個枚舉成員(按照文本順序)的關聯值加 1 得到的。這樣增加後的值必須在該基礎類型可表示的值的範圍內;否則,會出現編譯時間錯誤。
樣本
using System;
enum Color
{ Red, Green = 10, Blue }
則:Red = 0 Green = 10 Blue = 11
原因如下:
枚舉成員 Red 被自動賦予零值(因為它不具有初始值設定項並且是第一個枚舉成員)。
枚舉成員 Green 被顯式賦予值 10。
枚舉成員 Blue 被自動賦予比文本上位於它前面的成員大 1 的值。
6、枚舉成員的關聯值不能直接或間接地使用它自己的關聯枚舉成員的值。除了這個迴圈性限制外,枚舉成員初始值設定項可以自由地引用其他的枚舉成員初始值設定項,而不必考慮它們所在的文本位置的排列順序。在枚舉成員初始值設定項內,其他枚舉成員的值始終被視為屬於所對應的基礎類型,因此在引用其他枚舉成員時,沒有必要使用強制轉換。
樣本
enum Circular
{ A = B, B }
產生編譯時間錯誤,因為 A 和 B 的聲明是迴圈的。A 顯式依賴於 B,而 B 隱式依賴於 A。
7、枚舉成員的命名方式和作用範圍與類中的欄位完全類似。枚舉成員的範圍是包含了它的枚舉類型的體。在該範圍內,枚舉成員可以用它們的簡單名稱引用。在所有其他代碼中,枚舉成員的名稱必須用它的枚舉類型的名稱限定。枚舉成員不具有任何聲明可訪問性,如果一個枚舉類型是可訪問的,則它所含的所有枚舉成員都是可訪問的。
二、 轉換
1、 枚舉轉常數
(int)Color.Red = 0
(int)Color.Green = 10
2、 常數轉枚舉
Color mycolor = (Color)0
3、 根據常數取枚舉名
綜合2和4
或者
Enum.GetName(typeof(Color),0)) = ”Red”
Enum.GetName(typeof(Color),10)) = ”Green”
4、 枚舉轉字串
Color.Red.ToString() = ”Red”
5、 字串轉枚舉
String str = “Red”
Color mycolor = (Color)Enum.Parse(typeof(Color),str,false)