using System.Reflection; namespace YLErp.Helpers { public static class EnumHelper { /// /// get enum description by name /// /// enum type /// the enum name /// public static string GetDescriptionByName(TEnum enumItemName) { var fi = enumItemName.GetType().GetField(enumItemName.ToString()); if (fi == null) { return ""; } var attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false); if (attributes != null && attributes.Length > 0) { return attributes[0].Description; } else { return enumItemName.ToString(); } } /// /// 获取枚举类型的键值对 /// 因为目前都是给页面生成代码用,为了使用方便,所以把Value类型改为了string /// /// /// public static Dictionary GetDescriptionsByEnum(Type enumType) { var resultList = new Dictionary(); if (!enumType.IsEnum) { return resultList; } var fields = enumType.GetFields(BindingFlags.Static | BindingFlags.Public); foreach (var fieldInfo in fields) { var value = (int)fieldInfo.GetValue(null); var description = (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false); if (description == null || description.Length == 0) { resultList[fieldInfo.Name] = value.ToString(); } else { resultList[description[0].Description] = value.ToString(); } } return resultList; } public static TEnum GetEnumByDescription(this string description) where TEnum : struct { var result = default(TEnum); if (string.IsNullOrWhiteSpace(description)) { return result; } var enumType = typeof(TEnum); var fields = enumType.GetFields(BindingFlags.Static | BindingFlags.Public); foreach (var fieldInfo in fields) { var des = (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false); if (des.Length > 0 && des[0].Description == description) { result = (TEnum)fieldInfo.GetValue(null); } } return result; } public static bool TryGetEnumByDescription(string description, out TEnum result) where TEnum : struct { result = default(TEnum); if (string.IsNullOrWhiteSpace(description)) { return false; } var enumType = typeof(TEnum); var fields = enumType.GetFields(BindingFlags.Static | BindingFlags.Public); foreach (var fieldInfo in fields) { var des = (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false); if (des.Length > 0 && des[0].Description == description) { result = (TEnum)fieldInfo.GetValue(null); return true; } } return false; } } }