zoukankan      html  css  js  c++  java
  • 二、枚举扩展方法

    前言

    枚举也是在开发过程中经常要用到的一种数据类型。那么,下面就对枚举的一些扩展方法进行介绍。

    第一、提出疑问。

    先定义一个枚举,代码如下:

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

     1、页面需要一个下拉,显示枚举的项,该怎么办?

    2、页面需要一个下拉,显示枚举的描述,该怎么办?

    3、从一个项中,显示枚举的描述,该怎么办?

    4、把枚举中的项,处理成列表List,该怎么办?

    5、枚举的项转换成字典Dictionary,该怎么办?

    6、枚举的描述转换成字典Dictionary,该怎么办?

    第二、有了上面的问题,下面就一一实现吧!

    第一个问题的扩展方法,代码如下:

     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是枚举中随便一个项,扩展方法中会根据这个项找到这个枚举,然后全部列出

    结束

    枚举的扩展就知道怎么多了,以后发现在添加上去。

  • 相关阅读:
    hdu 1042 N!
    hdu 1002 A + B Problem II
    c++大数模板
    hdu 1004 Let the Balloon Rise
    hdu 4027 Can you answer these queries?
    poj 2823 Sliding Window
    hdu 3074 Multiply game
    hdu 1394 Minimum Inversion Number
    hdu 5199 Gunner
    九度oj 1521 二叉树的镜像
  • 原文地址:https://www.cnblogs.com/zl879211310/p/3477111.html
Copyright © 2011-2022 走看看