枚舉類型在C#中和結構類型(struct)都是值類型中的復合類型,其定義為:枚舉類型(也稱為枚舉)為定義一組可以賦給變量的命名整數常量提供了一種有效的方法。例如,假設您必須定義一個變量,該變量的值表示一周中的一天。該變量只能存儲七個有意義的值。若要定義這些值,可以使用枚舉類型。枚舉類型是使用 enum 關鍵字聲明的。
說白了,枚舉類型就是把你想要的東西符號化,轉化為一個指定的常數。枚舉類型的基礎類型可以是除了char類型外的所有類型,如果不指定基礎類型,那么默認為Int32類型。
枚舉類型的定義:
enum Days { Saturday=1, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday };
如果不指定第一個元素的初始值,那么枚舉元素默認從0開始,並以1的步長累加。
enum Feature { Point=1,Line=3,Polygon=5 };
注意各個元素之間以逗號隔開,並且最后一個元素末尾不需要添加任何符號,枚舉類型需要以分號結尾。
enum Colors:uint { Red = 1, Green = 2, Yellow = 3 };
更改基類型需要在枚舉名后使用冒號加類型名,C#枚舉類型可使用的類型有:byte、sbyte、short、ushort、int、uint、long、ulong。
枚舉類型的使用:
Feature A=Feature.Line;(A字段為只讀)
注意在賦予字段初始值時,我們無法使用枚舉類型:
string strColor = myColors.Tostring();(這樣是沒法通過編譯的)
在賦值時,即使賦予的值不在枚舉范圍內,編譯過程也不會報錯:
Feature B = (Feature)42;(需要顯示轉換成枚舉類型)
但也不應該這樣做,因為默認約定的是枚舉變量只容納枚舉定義的值之一。將任意值賦給枚舉類型的變量很有可能會導致錯誤。在該過程中,B是只讀的。
位或
Colors myColors = Colors.Red | Colors.Blue | Colors.Yellow;
位與
Colors myColors = Colors.Red & Colors.Blue & Colors.Yellow;
遍歷
foreach ( string s in Enum.GetNames( typeof (Days)))
轉換
Days C = (Days)Enum.Parse(typeof(Feature), "Line");
枚舉類型的優勢:
-
可減少由數字轉置或鍵入錯誤引起的錯誤。
-
修改方便。
-
使代碼更易讀,這意味着代碼中發生錯誤的概率降低。
-
確保向前兼容性。使用枚舉可減少將來有人更改與成員名稱對應的值時代碼出錯的概率。
-
枚舉類型確定了某個字段的取值范圍,使得代碼更加清晰易讀,也方便我們修改。