EnumEx枚举扩展

using System.Reflection;

获取枚举值的Description

        /// <summary>
        /// 获取枚举值的Description
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="value"></param>
        /// <returns></returns>
        public static string GetEnumDescription<T>(this T value) where T : struct
        {
            string result = value.ToString();
            Type type = typeof(T);
            FieldInfo info = type.GetField(value.ToString());
            var attributes = info.GetCustomAttributes(typeof(DescriptionAttribute), true);
            if (attributes != null && attributes.FirstOrDefault() != null)
            {
                result = (attributes.First() as DescriptionAttribute).Description;
            }
            return result;
        }

var @enum = EnumType.合格;
Console.WriteLine(@enum);
var str = @enum.GetEnumDescription();
Console.WriteLine(str);

根据Description获取枚举值

        /// <summary>
        /// 根据Description获取枚举值
        /// </summary>
        /// <typeparam name="T">枚举类型</typeparam>
        /// <param name="description"></param>
        /// <returns></returns>
        public static T GetEnumValueByDescription<T>(this string description) where T : struct
        {
            Type type = typeof(T);
            foreach (var field in type.GetFields())
            {
                if (field.Name == description)
                {
                    return (T)field.GetValue(null);
                }

                var attributes = (DescriptionAttribute[])field.GetCustomAttributes(typeof(DescriptionAttribute), true);
                if (attributes != null && attributes.FirstOrDefault() != null)
                {
                    if (attributes.First().Description == description)
                    {
                        return (T)field.GetValue(null);
                    }
                }
            }
            throw new ArgumentException(string.Format("{0} 未能找到对应的枚举.", description), "Description");
        }

str = "033";
@enum = str.GetEnumValueByDescription ();
Console.WriteLine(@enum);

根据字符串表示形式获取枚举值

        /// <summary>
        /// 根据字符串表示形式获取枚举值
        /// </summary>
        /// <typeparam name="T">枚举类型</typeparam>
        /// <param name="value">枚举的字符串形式</param>
        /// <returns></returns>
        public static T GetEnumValue<T>(this string value) where T : struct
        {
            T result;
            if (Enum.TryParse(value, true, out result))
            {
                return result;
            }

            throw new ArgumentException(string.Format("{0} 未能找到对应的枚举.", value), "Value");
        }
    }

str = @enum.ToString();
@enum = str.GetEnumValue ();
Console.WriteLine(@enum);

        internal class DescriptionAttribute : Attribute
        {
            public DescriptionAttribute(string value)
            {
                Description = value;
            }
            public string Description { get; set; }
        }

        public enum EnumType
        {
            [Description("011")]
            合格 = 1,
            [Description("022")]
            不合格 = 2,
            [Description("033")]
            异常 = 3,
        }

结果

猜你喜欢

转载自www.cnblogs.com/wesson2019-blog/p/12126272.html