原文連結:https://www.cnblogs.com/ZBO123/p/16871683.html
一、列舉
1、列舉是將變數的值羅列出來,變數的值只限於列舉出來的值的範圍。
2、列舉使用enum關鍵字來宣告,與類同級。列舉本身可以有修飾符,但列舉的成員始終是公共的,不能有訪問修飾符。列舉本身的修飾符僅能使用public和internal。
3、列舉是值型別。
4、列舉是隱式密封的,不允許作為基類派生子類。
5、列舉型別的列舉成員均為靜態,預設為Int32型別。
6、列舉成員不能相同,但列舉的值可以相同。
7、列舉成員是該列舉型別的命名常數。任意兩個列舉成員不能具有相同的名稱。每個列舉成員均具有相關聯的常數值。此值的型別就是列舉的基礎型別。每個列舉成員的常數值必須在該列舉的基礎型別的範圍之內。
二、宣告列舉(注意:最後一個沒有“逗號”)
1、不給成員賦值,成員的常數值預設從0開始。
public enum Week
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}
2、給成員賦值,下一個成員的值為上一個成員值+1
public enum Number
{
One = 1,
Two,
Three,
Seven = 7,
Eight,
Nine
}
3、列舉可以繼承byte、sbyte、short、ushort、 int、 uint、long 或 ulong
public enum Month : byte
{
January,
February,
March,
April,
May,
June,
July,
August,
September,
October,
November,
December
}
4、列舉成員的值可以等於某個成員加上一個值
public enum MachineState
{
PowerOff = 0,
Running = 1,
Sleeping = 2,
Hibernating = Sleeping + 3
}
三、列舉的簡單使用
1、轉成整數
int i = (int)Week.Sunday;
2、轉成字串
string s = Week.Sunday.ToString();
3、GetName方法:在指定列舉中檢索具有指定值的常數的名稱。
string strToday = Enum.GetName(typeof(Week), 3);
4、GetNames方法: 檢索指定列舉中常數名稱的陣列。
string[] array1= Enum.GetNames(typeof(Week));
Array array2 = Enum.GetNames(typeof(Week));
5、GetUnderlyingType方法:返回指定列舉的基礎型別。
Type type = Enum.GetUnderlyingType(typeof(Week));
6、GetValues方法:檢索指定列舉中常數值的陣列。
Array array3 = Enum.GetValues(typeof(Week));
7、Parse方法:將一個或多個列舉常數的名稱或數字值的字串表示轉換成等效的列舉物件。
string s1 = Enum.Parse(typeof(Week), "3").ToString();
int j = Convert.ToInt32(Enum.Parse(typeof(Week), "Wednesday"));
//預設第三個引數為false,當傳true時忽略大小寫
int k = Convert.ToInt32(Enum.Parse(typeof(Week), "wednesday", true));
8、Format方法:根據指定格式將指定列舉型別的指定值轉換為其等效的字串表示形式。
string s2 = Enum.Format(typeof(Week), 3, "G");
9、IsDefined方法:返回指定列舉中是否存在具有指定值的常數的指示。
bool b = Enum.IsDefined(typeof(Week), 3);
10、ToObject方法: 將具有整數值的指定物件轉換為列舉成員。
string s3 = Enum.ToObject(typeof(Week),3).ToString();
11、TryParse方法:將一個或多個列舉常數的名稱或數字值的字串表示轉換成等效的列舉物件。
Week w;
bool b1 = Enum.TryParse<Week>("Wednesday", out w);
四、列舉的特殊使用
//遍歷列舉 foreach (var s in Enum.GetValues(typeof(Status))) { Console.WriteLine(s); }//Enum.GetValues返回的是一個陣列
public enum enumStudent {
//列舉新增描述《列舉和反射的使用》
[Description("性別")]
sex = 0,
[Description("年齡")]
age = 1
}
//列舉的FLAG特性(對應的位編輯,不存在3這個值,是8、4、2、1)
[Flags] public enum Roles { Admin = 1 << 0, Member = 1 << 1, Manager = 1 << 2, Operator = 1 << 3 }
[Flags] public enum Roles { Admin = 1, Member = 2, Manager = 4, Operator = 8 } 1: 00000001 2: 00000010 4: 00000100 8: 00001000
//列舉和陣列的使用(陣列集合轉化成型別)