2、枚舉擴展方法

前言ide

枚舉也是在開發過程當中常常要用到的一種數據類型。那麼,下面就對枚舉的一些擴展方法進行介紹。this

第1、提出疑問。spa

先定義一個枚舉,代碼以下: code

public enum PhoneEnum
    {
        [Description("安卓")]
        Android=111,
        [Description("蘋果")]
        Ios=100,
    }
View Code

 一、頁面須要一個下拉,顯示枚舉的項,該怎麼辦?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;
        }
View Code

 實現代碼以下:

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;
        }
View Code

 實現代碼以下:

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();
        }
View Code

 實現代碼以下:

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;
        }
View Code

 實現代碼以下:

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);
         }
View Code

實現代碼以下:

 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);
         }
View Code

 實現代碼以下:

Dictionary<int,string> eDictionary= PhoneEnum.Ios.TToDictionaryDescription(); //PhoneEnum.Android是枚舉中隨便一個項,擴展方法中會根據這個項找到這個枚舉,而後所有列出

 

結束

枚舉的擴展就知道怎麼多了,之後發如今添加上去。

相關文章
相關標籤/搜索