using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Reflection; namespace Znyc.Cloudcar.Admin.Commons.Extensions { /// /// 枚举类型的扩展 /// public static class EnumExtensions { /// /// /// /// public static string ToDescription(this Enum item) { string name = item.ToString(); DescriptionAttribute desc = item.GetType().GetField(name)?.GetCustomAttribute(); return desc?.Description ?? name; } /// /// /// /// public static long ToInt64(this Enum item) { return Convert.ToInt64(item); } /// /// 根据枚举的value获取枚举 /// /// 枚举的类型,示例:typeof(enum1) /// 可能的枚举值 /// 枚举,示例:enum1.en1 public static Enum ParseEnum(Type enumType, string value) { return Enum.Parse(enumType, value) as Enum; } /// /// 根据 value 值获取Description /// /// /// /// public static string GetDescription(this Type enumType, int value) { object Key = GetNameAndValue(enumType).FirstOrDefault(p => p.Value.Equals(value)).Key; if (Key==null) { return null; } return Key.ToString(); } /// /// 获取枚举名以及对应的Value /// /// 枚举类型typeof(T) /// 返回Dictionary ,Key为描述名, Value为枚举对应的值 public static Dictionary GetNameAndValue(this Type type) { if (type.IsEnum) { Dictionary dic = new Dictionary(); Array enumValues = Enum.GetValues(type); foreach (Enum value in enumValues) { dic.Add(GetDescription(value), value.GetHashCode()); } return dic; } return null; } /// /// 从枚举中获取Description /// /// 需要获取枚举描述的枚举 /// 描述内容 public static string GetDescription(this Enum enumName) { string description = string.Empty; FieldInfo fieldInfo = enumName.GetType().GetField(enumName.ToString()); DescriptionAttribute[] attributes = GetDescriptAttr(fieldInfo); if (attributes != null && attributes.Length > 0) { description = attributes[0].Description; } else { description = enumName.ToString(); } return description; } /// /// 获取字段Description /// /// FieldInfo /// DescriptionAttribute[] private static DescriptionAttribute[] GetDescriptAttr(FieldInfo fieldInfo) { if (fieldInfo != null) { return (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false); } return null; } } }