获取动态枚举的值和说明

#region 获得枚举类型所包含的全部项的列表

        /// <summary>
        /// 获得枚举类型所包含的全部项的列表。
        /// </summary>
        /// <param name="enumType">枚举的类型</param>
        /// <param name="withAll">是否包含"All"</param>
        /// <returns></returns>
        public List<EnumItem> GetEnumItems(Type enumType, bool withAll)
        {
            List<EnumItem> list = new List<EnumItem>();

            if (enumType.IsEnum != true)
            {
                // 不是枚举类型
                throw new InvalidOperationException();
            }

            // 包含 All 选项
            //if (withAll == true)
            //    list.Add(new EnumItem(AppConst.IntNull, "All"));

            // 获得特性Description的类型信息
            Type typeDescription = typeof(DescriptionAttribute);

            // 获得枚举的字段信息(因为枚举的值实际上是一个static的字段的值)
System.Reflection.FieldInfo[] fields = enumType.GetFields();

            // 检索所有字段
            foreach (FieldInfo field in fields)
            {
                // 过滤掉一个不是枚举值的,记录的是枚举的源类型
                if (field.FieldType.IsEnum == false)
                    continue;

                // 通过字段的名字得到枚举的值
                int value = (int)enumType.InvokeMember(field.Name, BindingFlags.GetField, null, null, null);
                string text = string.Empty;

                // 获得这个字段的所有自定义特性,这里只查找Description特性
                object[] arr = field.GetCustomAttributes(typeDescription, true);
                if (arr.Length > 0)
                {
                    // 因为Description自定义特性不允许重复,所以只取第一个
                    DescriptionAttribute aa = (DescriptionAttribute)arr[0];

                    // 获得特性的描述值
                    text = aa.Description;
                }
                else
                {
                    // 如果没有特性描述,那么就显示英文的字段名
                    text = field.Name;
                }
                list.Add(new EnumItem(value, text));
            }

            return list;
        }

        #endregion

   public class EnumItem
    {
        private object m_key;
        private object m_value;

        public object Key
        {
            get { return m_key; }
            set { m_key = value; }
        }

        public object Value
        {
            get { return m_value; }
            set { m_value = value; }
        }

        public EnumItem(object _key, object _value)
        {
            m_key = _key;
            m_value = _value;
        }
    }

public enum EnumReturnedType
    {

     [DisplayName("说明")]
    Returned = 1,

}

第二种方法:

public enum EnumReturnedType
    {
        /// <summary>
        /// 退货
        /// </summary>
        [EnumAttribute("退货")]
        Returned = 1,

    }

-------------------------------------------------------

    /// <summary>
    /// 自定义属性
    /// </summary>   
    [AttributeUsage(AttributeTargets.Field, AllowMultiple = true)]
    public class EnumAttribute : Attribute
    {
        /// <summary>
        /// 适用区域性
        /// </summary>
        public string Culture { set; get; }

        /// <summary>
        /// 说明信息
        /// </summary>
        public string Description { set; get; }

        /// <summary>
        /// 初始化说明信息
        /// </summary>
        /// <param name="description">说明信息</param>
        public EnumAttribute(string description)
        {
            this.Description = description;
            this.Culture = string.Empty;
        }

        /// <summary>
        /// 初始化说明信息及适用区域性
        /// </summary>
        /// <param name="description">说明信息</param>
        /// <param name="culture">适用区域性</param>
        public EnumAttribute(string description, string culture)
        {
            this.Description = description;
            this.Culture = culture;
        }
    }

   /// <summary>
        /// 获得枚举说明
        /// </summary>
        public static Dictionary<Enum, string> GetDescriptions(Type t)
        {

            Dictionary<Enum, string> d = new Dictionary<Enum, string>();

            if (t.IsEnum == false) return d;

            var values = Enum.GetValues(t);

            foreach (var item in values) d.Add((Enum)item, ((Enum)item).GetDescription());

            return d;
        }

用法:

Dictionary<Enum, string> disType = EnumHelper.GetDescriptions(typeof(EnumReturnedType));

            foreach (var kv in disType)
            {
                type.Add(new SelectListItem
                {
                    Value = kv.Key.ToString("d"),
                    Text = kv.Value
                });
            }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值