Enum添加说明并将说明和int值放在集合中并选定当前项

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liuzishang/article/details/84635333

实现: 

 public static class EnumExtension
    {
        /// <summary>
        /// 获取枚举的描述,需要DescriptionAttribute属性
        /// </summary>
        /// <param name="e"></param>
        /// <returns></returns>
        public static string GetDescription(this Enum e)
        {
            //获取枚举的Type类型对象
            var type = e.GetType();
            //获取枚举的所有字段
            var fields = type.GetFields();

            //遍历所有枚举的所有字段
            foreach (var field in fields)
            {
                if (field.Name != e.ToString())
                {
                    continue;
                }
                //第二个参数true表示查找EnumDisplayNameAttribute的继承链

                if (field.IsDefined(typeof(DescriptionAttribute), true))
                {
                    var attr = field.GetCustomAttribute(typeof(DescriptionAttribute), false) as DescriptionAttribute;
                    if (attr != null)
                    {
                        return attr.Description;
                    }
                }
            }

            //如果没有找到自定义属性,直接返回属性项的名称
            return e.ToString();
        }

        /// <summary>
        /// 根据枚举获取下拉框列表
        /// </summary>
        /// <param name="en"></param>
        /// <returns></returns>
        public static List<KeyValue> GetSelectList(this Enum en)
        {
            var list = new List<KeyValue>();
            foreach (var e in Enum.GetValues(en.GetType()))
            {
                list.Add(new KeyValue() { Value = GetDescription(e as Enum), Key = ((int)e).ToString(), IsSelected = e.ToString() == en.ToString() });
            }
            return list;
        }
        
    }
    public class KeyValue {
        public string Key { get; set; }
        public string Value { get; set; }
        public bool IsSelected { get; set; }
    }

调用:

 class Program
    {
        static void Main(string[] args)
        {
            var list = OrderState.NoPay.GetSelectList();
            foreach (var item in list)
            {
                string str = string.Format("Key:{0},Value:{1},Selected:{2}", item.Key, item.Value, item.IsSelected);
                Console.WriteLine(str);
            }
            Console.ReadKey();
        }
    }
    public enum OrderState
    {
        [Description("未付款")]
        NoPay = 0,
        [Description("支付成功")]
        PaySuccess = 1,
        [Description("支付失败")]
        PayError = 2,
        [Description("已退款")]
        PayReturn = 3
    }

结果:

猜你喜欢

转载自blog.csdn.net/liuzishang/article/details/84635333