1 public void print() 2 { 3 string b = Console.ReadLine(); 4 object a = (AppKey)Enum.Parse(typeof(AppKey), b); 5 Console.WriteLine(a); 6 } 7 8 9 public enum AppKey 10 { 11 a, 12 b, 13 c, 14 d, 15 e 16 }
一直對枚舉類型不太熟 今天花時間試試 而後看看別人寫的文章html
以上是本身簡單寫的代碼 發現不論是傳遞int仍是枚舉的實際值,返回的也都是枚舉的值 也就是說 傳遞0 和傳遞a 返回的都是asql
一、枚舉可以使代碼更加清晰,它容許使用描述性的名稱表示整數值。數據庫
二、枚舉使代碼更易於維護,有助於確保給變量指定合法的、指望的值。數組
三、枚舉使代碼更易輸入。post
一、簡單枚舉學習
C#提供類一個類來方便操做枚舉,下面給出這個類的經常使用方法:this
方法 | 名稱 |
CompareTo | 將此實例與指定對象進行比較並返回一個對兩者的相對值的指示 |
Equals | 指示此實例是否等於指定的對象 |
Format | 根據指定格式將指定枚舉類型的指定值轉換爲其等效的字符串表示形式 |
GetName | 在指定枚舉中檢索具備指定值的常數的名稱 |
GetNames | 檢索指定枚舉中常數名稱的數組 |
GetTypeCode | 返回此實例的基礎 TypeCode |
GetUnderlyingType | 返回指定枚舉的基礎類型 |
GetValues | 索指定枚舉中常數值的數組 |
HasFlag | 肯定當前實例中是否設置了一個或多個位域 |
IsDefined | 返回指定枚舉中是否存在具備指定值的常數的指示 |
Parse | 將一個或多個枚舉常數的名稱或數字值的字符串表示轉換成等效的枚舉對象。 一個參數指定該操做是否不區分大小寫 |
TryParse | 將一個或多個枚舉常數的名稱或數字值的字符串表示轉換成等效的枚舉對象。 用於指示轉換是否成功的返回值 |
要顯示指定枚舉的底層數據類型很簡單,只需在聲明枚舉的時候加個冒號,後面緊跟要指定的數據類型。url
enum sex : byte //顯示指定枚舉的底層數據類型 { male, female, //此逗號能夠省略 }; //此分號能夠省略
顯式設置枚舉的成員常量值,默認是從0開始,逐個遞增的。可是如下例子卻設置成了1,2,3,4,5,6,7,0。並且成員值能夠同樣的。spa
enum Week { Monday = 1, Tuesday = 2, Wednesday = 3, Sunday = 0, Everyday = 1 //成員的值能夠設置成同樣的,可是成員不行 } Console.WriteLine((int)Week.Monday); //獲取值
示例,由枚舉值獲取枚舉名稱與由枚舉名稱獲取枚舉值code
class Program { static void Main(string[] args) { Console.WriteLine(Enum.GetName(typeof(Man),1)); //仍是 劉備 (由值獲取名字) string[] array1 = Enum.GetNames(typeof(Man)); Console.WriteLine(array1[1]); //關羽 Array array2 = Enum.GetValues(typeof(Man)); Console.WriteLine(array2.GetValue(1)); //仍是關羽 Type t = Enum.GetUnderlyingType(typeof(Man)); Console.WriteLine(t); //輸出 Int32 //由值獲取內容 int i = 1; string Name = Enum.Parse(typeof(Man), i.ToString()).ToString(); //此時 Name="劉備" Console.WriteLine(Name); //由值獲取內容 string Name2 = "關羽"; int j = Convert.ToInt32(Enum.Parse(typeof(Man), Name2)); //此時 j=2 Console.WriteLine(j); Console.ReadKey(); } } enum Man { 劉備 = 1, 關羽 = 2, 張飛 = 3 }
二、標誌枚舉
標誌枚舉要在頂部加[System.Flags]特性進行聲明。並且枚舉支持組合運算。先來看個例子
class Program { static void Main(string[] args) { var man = Week.白 | Week.美; //賦值爲101 計算方法001或上100,結果是101 Console.WriteLine((int)man); if ((man & Week.白) == Week.白) //101 man { //001 白 逐位相與, Console.WriteLine("此人白"); //001 若是結果是白,就能夠反推出man包含 白 } else { Console.WriteLine("此人黑"); } Console.ReadKey(); } } [System.Flags] public enum Week { 白 = 1, //001 富 = 2, //010 美 = 4, //100 }
這種位運算是很是有用的,在sql語句裏也支持位運算。也就是說,把一個枚舉運算後的結果存入數據庫以後,還可以按照你的要求讀取出來。好比:
將一個"白美"存如數據庫的值存入數據庫,那麼存入去的就是整型5。
那麼我想讀出全部的"白"數據列表怎麼讀呢?白,能夠是純白"1",也是是白富3,能夠是白美5,也能夠是白富美7,你能夠用in來讀,可是更好的方法是在sql語句中一樣使用位運算。
select * from Table1 where Tag & 1 = 1 //Tag是列名 select * from Table1 where Tag | 1 = Tag
當參數、返回值、變量等類型可使枚舉,儘可能使用枚舉(要注意考慮分類的穩定性)
大多數狀況下均可以使用int類型枚舉,下列狀況除外。
枚舉可能被大量頻繁的使用,這時爲了節約空間可使用小於int類型的枚舉。
標誌枚舉,且標誌多於32個。
下面寫一個:枚舉綁定MVC3下拉列表的示例:
控制器代碼:
namespace MvcStart.Controllers { public class HomeController : Controller { public ActionResult GetSexList() { Dictionary<string, int> Sexlist = new Dictionary<string, int>(); string[] keys = Enum.GetNames(typeof(sex)); Array values = Enum.GetValues(typeof(sex)); for (int i = 0; i < keys.Length; i++) { Sexlist.Add(keys[i], (int)values.GetValue(i)); } return View(Sexlist); } } public enum sex { male = 1, female = 2, other = 3 } }
視圖代碼:
@model Dictionary<string, int> <select> @foreach(var item in @Model) { <option value="@item.Value">@item.Key</option> } </select>
生成的HTML代碼:
<select> <option value="1">male</option> <option value="2">female</option> <option value="3">other</option> </select>
再來一個例子,獲取枚舉描述
public static class GetDescription { /// <summary> /// 獲取描述信息 /// </summary> /// <param name="en"></param> /// <returns></returns> public static string description(this Enum en) { Type type = en.GetType(); MemberInfo[] memInfo = type.GetMember(en.ToString()); if (memInfo != null && memInfo.Length > 0) { object[] attrs = memInfo[0].GetCustomAttributes(typeof(System.ComponentModel.DescriptionAttribute), false); if (attrs != null && attrs.Length > 0) return ((DescriptionAttribute)attrs[0]).Description; } return en.ToString(); } } public enum Sex { [Description("男")] man = 1, [Description("女")] woman = 2, [Description("其餘")] other = 3 }