获取枚举Description 属性

     /// <summary>
        /// 获取枚举变量值的 Description 属性
        /// </summary>
        /// <param name="obj">枚举变量</param>
        /// <returns>如果包含 Description 属性,则返回 Description 属性的值,否则返回枚举变量值的名称</returns>
        public static string GetDescription(this Enum obj)
        {
            string description = string.Empty;
            try
            {
                Type _enumType = obj.GetType();
                DescriptionAttribute dna = null;
                FieldInfo fi = null;
                var fields = _enumType.GetCustomAttributesData();

                if (!fields.Where(i => i.Constructor.DeclaringType.Name == "FlagsAttribute").Any())
                {
                    fi = _enumType.GetField(Enum.GetName(_enumType, obj));
                    dna = (DescriptionAttribute)Attribute.GetCustomAttribute(fi, typeof(DescriptionAttribute));
                    if (dna != null && string.IsNullOrEmpty(dna.Description) == false)
                        return dna.Description;
                    return null;
                }

                GetEnumValuesFromFlagsEnum(obj).ToList().ForEach(i =>
                {
                    fi = _enumType.GetField(Enum.GetName(_enumType, i));
                    dna = (DescriptionAttribute)Attribute.GetCustomAttribute(fi, typeof(DescriptionAttribute));
                    if (dna != null && string.IsNullOrEmpty(dna.Description) == false)
                        description += dna.Description + ",";
                });

                return description.EndsWith(",")
                    ? description.Remove(description.LastIndexOf(‘,‘))
                    : description;
            }
            catch
            {
                return "未设定";
            }

        }
     /// <summary>
        /// 得到Flags特性的枚举的集合
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        static List<Enum> GetEnumValuesFromFlagsEnum(Enum value)
        {
            List<Enum> values = Enum.GetValues(value.GetType()).Cast<Enum>().ToList();
            List<Enum> res = new List<Enum>();
            foreach (var itemValue in values)
            {
                if (value.GetHashCode() >= itemValue.GetHashCode())//防止一些左而数小,后面数大的情况,严格规定左而有大数,右面为小数
                    if ((value.GetHashCode() & itemValue.GetHashCode()) > 0
                        || (value.GetHashCode() == 0 && itemValue.GetHashCode() == 0))//输出为0的枚举元素
                        res.Add(itemValue);
            }
            return res;
        }

  

				
时间: 2024-10-11 21:15:48

获取枚举Description 属性的相关文章

枚举扩展方法获取枚举Description

枚举扩展方法 1 /// <summary> 2 /// 扩展方法,获得枚举的Description 3 /// </summary> 4 /// <param name="value">枚举值</param> 5 /// <param name="nameInstend">当枚举没有定义DescriptionAttribute,是否用枚举名代替,默认使用</param> 6 /// <r

获取枚举值上的Description特性说明

/// <summary> /// 获取枚举值上的Description特性说明 /// </summary> /// <typeparam name="T">枚举类型</typeparam> /// <param name="obj">枚举值</param> /// <returns></returns> public static string GetDescript

[C#]枚举操作(从枚举中获取Description,根据Description获取枚举,将枚举转换为ArrayList)工具类

关键代码: using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Reflection; namespace CSharpUtilHelpV2 { /// <summary> /// 基于.NET 2.0的枚举工具类 /// </summary> public static class EnumToolV2

.NET获取枚举DescriptionAttribute描述信息性能改进的多种方法

一. DescriptionAttribute的普通使用方式 1.1 使用示例 DescriptionAttribute特性可以用到很多地方,比较常见的就是枚举,通过获取枚举上定义的描述信息在UI上显示,一个简单的枚举定义: public enum EnumGender { None, [System.ComponentModel.Description("男")] Male, [System.ComponentModel.Description("女")] Fem

第三章 EnumUtil根据值获取枚举对象

项目中使用枚举类的好处这里不再赘述,在使用枚举值时,通常需要根据值来获取枚举对象,下面介绍两种实现方案: 1.在枚举类中定义方法实现 首先给出如下性别枚举类: public enum SexEnum { MAN("M", "男"), WOMAN("F", "女"); private String code; private String desc; SexEnum(String code, String desc) { thi

OSS.Common获取枚举字典列表标准库支持

介绍了OSS.Common的标准库支持扩展,也列举了可能遇到问题的解决方案.由于时间有限,同时.net standard暂时还没有提供对DescriptionAttribute的支持,所以其中的转化枚举到字典列表的扩展当时按照第一种处理方式先行屏蔽,这次按照第三种方式完善一下. 既然.net standard 下没有提供对DescriptAttribute的支持,首先我先自定义一个Attribute来补充: [AttributeUsage(AttributeTargets.All, AllowM

C#获取枚举描述代码

public class MusterEnum { /// 获取枚举的描述信息 /// </summary> /// <param name="e">传入枚举对象</param> /// <returns>得到对应描述信息</returns> public String GetEnumDesc(Enum e) { FieldInfo EnumInfo = e.GetType().GetField(e.ToString());

C# 获取枚举的 键名称,值 和描述 遍历枚举

C# Enum  枚举的操作.  键名称,值 和描述  和 遍历枚举 /// <summary> /// 促销 /// </summary> public enum cxsd { [Description("推荐")] tj = 2, [Description("置顶")] zd = 4, [Description("热卖")] rm = 8 } //获取 枚举 值 Array rolearry = Enum.GetVal

C#获取枚举的描述

public enum StatusEnum { /// <summary> /// 运行中 /// </summary> [Description("运行中")] Running = 1, /// <summary> /// 已关闭 /// </summary> [Description("已关闭")] Stopped = 0 } public class EnumHelper { #region 静态方法 publ