【c#】枚举定义、配合[Description]特性使用、验证是否包含和反射获取特性[Description]的值使用示例详情

说明

C#中的枚举是一种用于定义命名常量集合的数据类型。枚举常量是具有固定值的唯一标识符,这些值可以在整个程序中使用。

示例

using System.ComponentModel;

namespace xxxx.Enun
{
    
    
    /// <summary>
    /// 定义枚举
    /// </summary>
    public enum XxxxEnum
    {
    
    
        /// <summary>
        /// GW_S1
        /// </summary>
        [Description("gw-s1")]
        GW_S1,
        /// <summary>
        /// GW_S2
        /// </summary>
        [Description("gw-s2")]
        GW_S2,
    }
}
        /// <summary>
        /// 获取枚举的特性 DescriptionAttribute
        /// </summary>
        /// <param name="xxxxEnum">xxxxEnum</param>
        /// <returns>返回枚举的Description特性的值</returns>
        public static string GetDescription(XxxxEnum xxxxEnum)
        {
    
    
            FieldInfo field = xxxxEnum.GetType().GetField(xxxxEnum.ToString());
            object[] attributes = field.GetCustomAttributes(typeof(DescriptionAttribute), false);
            if (attributes.Length > 0)
            {
    
    
                DescriptionAttribute attribute = (DescriptionAttribute)attributes[0];
                return attribute != null ? attribute.Description : xxxxEnum.ToString();
            }
            return xxxxEnum.ToString();
        }

        /// <summary>
        /// 获取枚举的所有Description特性
        /// </summary>
        /// <typeparam name="TEnum">枚举</typeparam>
        /// <returns>返回枚举Description的值集合</returns>
        public static Dictionary<TEnum, string> GetDescriptions<TEnum>() where TEnum : Enum
        {
    
    
            var descriptions = new Dictionary<TEnum, string>();
            var enumType = typeof(TEnum);

            foreach (TEnum value in Enum.GetValues(enumType))
            {
    
    
                FieldInfo field = enumType.GetField(value.ToString());
                object[] attributes = field.GetCustomAttributes(typeof(DescriptionAttribute), false);
                if (attributes == null || attributes.Length == 0)
                {
    
    
                    continue;
                }
                
                foreach (var item in attributes)
                {
    
    
                    DescriptionAttribute attribute = (DescriptionAttribute)item;
                    string description = attribute != null ? attribute.Description : value.ToString();
                    if (descriptions.ContainsKey(value))
                    {
    
    
                        continue;
                    }
                    descriptions[value] = description;
                }
            }

            return descriptions;
        }

猜你喜欢

转载自blog.csdn.net/qq_38428623/article/details/131086917
今日推荐