using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; namespace QYZH.InteractiveMagazine.Common.Extensions { /// /// 枚举扩展方法 /// public static class EnumExtension { /// /// 获取枚举的DescriptionAttribute描述 /// /// 枚举类型 /// 枚举值 /// 描述文本,如果没有DescriptionAttribute则返回枚举名称 public static string GetDescription(this T enumValue) where T : Enum { System.Reflection.FieldInfo? field = enumValue.GetType().GetField(enumValue.ToString()); if (field == null) { return enumValue.ToString(); } var attribute = (DescriptionAttribute?)Attribute.GetCustomAttribute( field, typeof(DescriptionAttribute)); return attribute?.Description ?? enumValue.ToString(); } /// /// 获取枚举名称 /// /// 枚举类型 /// 枚举值 /// 枚举名称 public static string GetName(this T enumValue) where T : Enum { return enumValue.ToString(); } /// /// 获取所有枚举名称列表 /// /// 枚举类型 /// 枚举名称列表 public static List GetNames() where T : Enum { return Enum.GetNames(typeof(T)).ToList(); } /// /// 获取所有枚举描述列表 /// /// 枚举类型 /// 枚举描述列表 public static List GetDescriptions() where T : Enum { return Enum.GetValues(typeof(T)) .Cast() .Select(e => e.GetDescription()) .ToList(); } /// /// 将枚举转换为字典(名称,值) /// /// 枚举类型 /// 枚举字典 public static Dictionary ToDictionary() where T : Enum { return Enum.GetValues(typeof(T)) .Cast() .ToDictionary(e => e.GetDescription(), e => Convert.ToInt32(e)); } } }