• 二、枚举扩展方法


    前言

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

    第一、提出疑问。

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

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

    结束

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

  • 相关阅读:
    SDUT 猴子分桃
    SDUT 母牛的故事
    SDUT 小鑫の日常系列故事(六)——奇遇记 递推算法
    SDUT 爬楼梯
    SDUT 王小二切饼
    linux 排序命令sort
    shell 判断语句
    shell统计指定范围内的所有质数以及它们的和
    shell 1到指定数累加
    shell九九乘法表
  • 原文地址:https://www.cnblogs.com/zl879211310/p/3477111.html
Copyright © 2020-2023  润新知