根據MSDN上給出的定義,枚舉是一個指定的常數集,其基礎類型能夠是除Char外的任何整型。 若是沒有顯式聲明基礎類型,則使用 Int32。 Enum 是 .NET Framework 中全部枚舉的基類。其基礎類型能夠是byte、sbyte、short、ushort、int、unit、long、ulong。默認狀況下,第一個枚舉數的值爲0,而後後續的枚舉數依次加1。數組
枚舉能夠申明在命名空間下和類同級別,也可申明在類的內部。申明語法以下:ide
[access modifiers] enum <identifier> [:enum_base]函數
{ui
enum bodyspa
}3d
Access modifiers : 定義訪問修飾符,只能是public和internal,默認internalcode
Identifier:定義枚舉的名稱orm
Enum_base:定義枚舉整數的類型,默認是int(能夠定義除Char外的任何整數類型,詳見上面枚舉的定義段)blog
namespace enumDemo { enum Color:byte //基礎類型爲byte { Red, Orange, Yellow, Green, Cyan, Blue, Purple, //能夠省略逗號 }; //能夠省略分號 class Program { static void Main(string[] args) { } } }
enum Color:byte //基礎類型爲byte { Red=2, //能夠用基礎數重定義默認值,Red基礎數定義從2開始,那麼Orange基礎數爲3,後續常量值依此類推,
//可是建議基礎數據定義包含默認值,不然枚舉的實例化可能會出現問題 Orange, Yellow, Green, Cyan, Blue, Purple, };
實例化枚舉值能夠有三種方法繼承
1,直接賦值爲枚舉常量
2,經過枚舉值轉化賦值
3,經過構造函數實例化枚舉值
class Program { static void Main(string[] args) { Color myColor = Color.Yellow; //賦值枚舉常量 Color myColor1 = (Color)4; //賦值枚舉值,而後轉爲枚舉常量 Color myColor2 = new Color(); //構造函數的初始化,myColor2賦值的枚舉值爲0,可是Color枚舉的最小值爲2,是一個非法值 Console.WriteLine("my color is {0}, color value is {0:D}",myColor); Console.WriteLine(myColor1); Console.WriteLine("my color is {0},color value is {1} " ,(Color)myColor2,myColor2); Console.Read(); } }
System.Enum 類型是全部枚舉類型的抽象基類(它是一種與枚舉類型的基礎類型不一樣的獨特類型),而且從 System.Enum 繼承的成員在任何枚舉類型中均可用。存在從任何枚舉類型到System.Enum 的裝箱轉換,而且存在從 System.Enum 到任何枚舉類型的取消裝箱轉換。System.Enum 自己不是枚舉類型。相反,它是一個類類型,全部枚舉類型都是從它派生的。類型 System.Enum 從類型 System.ValueType派生,然後者又從類型 object 派生。在運行時,類型 System.Enum 的值能夠是 null 或是對任何枚舉類型的裝了箱的值的引用。
class Program { static void Main(string[] args) { Color color1 = (Color)6; // 將整數轉化爲枚舉常量 int int1 = (int)Color.Green; // 將枚舉常量轉化爲整數 Console.WriteLine(int1); string[] format = { "G", "F", "X", "D" }; foreach (string f in format) { string colorStr = color1.ToString(f); //格式化輸出 Console.WriteLine(colorStr); } Console.WriteLine("Color Format is: {0}", Enum.Format(typeof(Color), (byte)7, "G")); //經過format方法格化將枚舉值轉爲string Console.WriteLine("Color Constant is :{0}", Enum.GetName(typeof(Color), (byte)8)); //經過GetName方法將枚舉值轉化爲string,8默認是int類型需轉化爲Color的基礎類型byte foreach (string item in Enum.GetNames(typeof(Color))) //經過GetName方法將枚舉轉化爲string數組 Console.WriteLine("Color Name Constant is :{0}", item); foreach (Color item in Enum.GetValues(typeof(Color))) //經過GetValues方法轉化爲Color常量 Console.WriteLine("Color value is {0}", item); if (Enum.IsDefined(typeof(Color), (byte)4)) Console.WriteLine("the value 4's constant is {0}", Enum.Parse(typeof(Color),"4")); else Console.WriteLine("the 4 value is not define"); Color color2 = (Color)Enum.ToObject(typeof(Color), 4); //經過ToObject方法將整數值轉化爲枚舉常量 Console.WriteLine(color2); Color color3; if (Enum.TryParse("2", out color3)) //經過TryParse試作將字符串轉換爲枚舉常量 Console.WriteLine("The value 2 is Defined: {0}",color3); else Console.WriteLine("The value 2 is not Defined"); if (Enum.TryParse("BLACK", out color3)) //經過TryParse試作將字符串轉換爲枚舉常量 Console.WriteLine("The CONSTANT BLACK is Defined: {0}", color3); else Console.WriteLine("The CONSTANT BLACK is not Defined"); Console.Read(); } }
在枚舉的申明上面加上[Flags]特性
class Program { [Flags] enum familyPets { None = 0x0, //定義16進制的0 Dog = 0x01, //定義16進制的1 Cat = 0x02, Bird = 0x04, Duck = 0x08, }; static void Main(string[] args) { familyPets fp = familyPets.Dog | familyPets.Cat; Console.WriteLine("Pets: {0:G} ({0:D})", fp); //顯示結果Dog,Cat(3),16進制1和2按位或運算結果爲3 if (fp.HasFlag(familyPets.Cat)) //判斷fp是否認義位域Cat Console.WriteLine("有寵物貓。"); else Console.WriteLine("沒有寵物貓。"); if ((fp & familyPets.Dog) == familyPets.Dog) //fp和Dog位域按位與運算 Console.WriteLine("有寵物Dog。"); else Console.WriteLine("沒有寵物Dog。"); if (fp == familyPets.None) //fp位運算的結果爲3,不爲0 Console.WriteLine("家庭裏沒有寵物。"); else Console.WriteLine("家庭裏有寵物。"); Console.Read(); } }