前言ide
枚舉也是在開發過程當中常常要用到的一種數據類型。那麼,下面就對枚舉的一些擴展方法進行介紹。this
第1、提出疑問。spa
先定義一個枚舉,代碼以下: code
public enum PhoneEnum { [Description("安卓")] Android=111, [Description("蘋果")] Ios=100, }
一、頁面須要一個下拉,顯示枚舉的項,該怎麼辦?blog
二、頁面須要一個下拉,顯示枚舉的描述,該怎麼辦?ip
三、從一個項中,顯示枚舉的描述,該怎麼辦?開發
四、把枚舉中的項,處理成列表List,該怎麼辦?string
五、枚舉的項轉換成字典Dictionary,該怎麼辦?io
六、枚舉的描述轉換成字典Dictionary,該怎麼辦?event
第2、有了上面的問題,下面就一一實現吧!
第一個問題的擴展方法,代碼以下:
public static List<SelectListItem> ToListItem<T>() { List<SelectListItem> li = new List<SelectListItem>(); foreach (int s in Enum.GetValues(typeof(T))) { li.Add(new SelectListItem { Value = s.ToString(), Text = Enum.GetName(typeof(T), s) } ); } return li; }
實現代碼以下:
ViewData["enum"] = ExtendHelper.ToListItem<PhoneEnum>();
第二個問題的擴展方法,代碼以下:
public static List<SelectListItem> ToListDescription(this Enum eEnum) { var list = (from Enum d in Enum.GetValues(eEnum.GetType()) select new SelectListItem { Value = ((int) Enum.Parse(eEnum.GetType(), Enum.GetName(eEnum.GetType(), d))).ToString(), Text = d.ToDescriptionName() //第二個問題的實現,須要第三個問題的擴展方法的支持 }).ToList(); return list; }
實現代碼以下:
ViewData["enumDistion"] = ExtendHelper.ToListDescription(PhoneEnum.Ios);(PhoneEnum.Ios是枚舉中隨便一個項,擴展方法中會根據這個項找到這個枚舉,而後所有列出)
第三個問題的擴展方法,代碼以下:
public static string ToDescriptionName(this Enum eEnum) { var type = eEnum.GetType(); var menInfo = type.GetMember(eEnum.ToString()); if (menInfo.Length > 0) { var attrs = menInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false); if (attrs.Length > 0) { return ((DescriptionAttribute)attrs[0]).Description; } } return eEnum.ToString(); }
實現代碼以下:
ViewData["enumDis"] = PhoneEnum.Ios.ToDescriptionName();
第四個問題的擴展方法,代碼以下:
public static List<string> ToStringList(this Enum eEnum) { var list = (from Enum d in Enum.GetValues(eEnum.GetType()) select d.ToString()).ToList(); return list; }
實現代碼以下:
ViewData["enumList"] = ExtendHelper.ToStringList(PhoneEnum.Android);//PhoneEnum.Android是枚舉中隨便一個項,擴展方法中會根據這個項找到這個枚舉,而後所有列出
第五個問題的擴展方法,代碼以下:
public static Dictionary<int,string> ToDictionary(this Enum eEnum) { var list = (from Enum d in Enum.GetValues(eEnum.GetType()) select new { ID=(int)Enum.Parse(eEnum.GetType(),Enum.GetName(eEnum.GetType(),d)), Name=d.ToString() }).ToList(); return list.ToDictionary(c => c.ID, c => c.Name); }
實現代碼以下:
Dictionary<int,string> eDictionary= PhoneEnum.Ios.ToDictionary(); //PhoneEnum.Android是枚舉中隨便一個項,擴展方法中會根據這個項找到這個枚舉,而後所有列出
第六個問題的擴展方法,代碼以下:
public static Dictionary<int, string> ToDictionaryDescription(this Enum eEnum) { var list = (from Enum d in Enum.GetValues(eEnum.GetType()) select new { ID = (int)Enum.Parse(eEnum.GetType(), Enum.GetName(eEnum.GetType(), d)), Name = d.ToDescriptionName() }).ToList(); return list.ToDictionary(c => c.ID, c => c.Name); }
實現代碼以下:
Dictionary<int,string> eDictionary= PhoneEnum.Ios.TToDictionaryDescription(); //PhoneEnum.Android是枚舉中隨便一個項,擴展方法中會根據這個項找到這個枚舉,而後所有列出
結束
枚舉的擴展就知道怎麼多了,之後發如今添加上去。