using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Reflection; namespace Hncore.Infrastructure.Extension { public static class EnumExtension { public static Dictionary ToDictionary() { Dictionary dic = new Dictionary(); string namestr = ""; foreach (var e in Enum.GetValues(typeof(T))) { namestr = ""; object[] objArrDisplay = e.GetType().GetField(e.ToString()).GetCustomAttributes(typeof(DisplayAttribute), true);//Display if (objArrDisplay.Any()) { var da = objArrDisplay[0] as DisplayAttribute; namestr = da.Name; } else { object[] objArrDescription = e.GetType().GetField(e.ToString()).GetCustomAttributes(typeof(DescriptionAttribute), true);//Description namestr = objArrDescription.Any() ? (objArrDescription[0] as DescriptionAttribute).Description : e.ToString(); } int value = Convert.ToInt32(e); // string str = item.GetDescription(); // int value = (int) item; dic.Add(value, namestr); } return dic; } #region 获取枚举的相关信息的集合 /// /// 获取枚举的相关信息的集合 /// /// /// public static List EnumToList() { var list = new List(); foreach (var e in Enum.GetValues(typeof(T))) { var m = new EnumInfo(); object[] objArrDisplay = e.GetType().GetField(e.ToString()).GetCustomAttributes(typeof(DisplayAttribute), true);//Display if (objArrDisplay.Any()) { var da = objArrDisplay[0] as DisplayAttribute; m.Name = da.Name; } else { object[] objArrDescription = e.GetType().GetField(e.ToString()).GetCustomAttributes(typeof(DescriptionAttribute), true);//Description m.Name = objArrDescription.Any() ? (objArrDescription[0] as DescriptionAttribute).Description : e.ToString(); } m.Value = Convert.ToInt32(e); list.Add(m); } return list; } public class EnumInfo { public string Name { set; get; } public int Value { set; get; } } #endregion public static string GetDisplayName(T enumValue) { object[] objArrDisplay = enumValue.GetType().GetField(enumValue.ToString()) ?.GetCustomAttributes(typeof(DisplayAttribute), true);//Display if (objArrDisplay!=null&&objArrDisplay.Any()) { var da = objArrDisplay[0] as DisplayAttribute; return da?.Name; } return ""; } /// /// 获取枚举上通过DisplayName、Description或Display柱注的名称 /// 优先级为DisplayName>Description>Display /// /// 枚举值 /// 枚举名称 /// public static string GetEnumDisplayName(this Enum e) { try { Type t = e.GetType(); FieldInfo fi = t.GetField(Enum.GetName(t, e)); var dna = fi.GetCustomAttribute(); if (dna != null) return dna.DisplayName; var da = fi.GetCustomAttribute(); if (da != null) return da.Description; var d = fi.GetCustomAttribute(); if (d != null) return d.Name; } catch (Exception ex) { return "获取枚举"+e.GetType().FullName+"名称错误:"+ex.Message; } return ""; } public static string ToHtmlSelectOptions() { var dic = ToDictionary(); string str = ""; foreach (var key in dic.Keys) { str += ""; } return str; } #region 判断值是否在枚举类型中存在 /// /// 判断值是否在枚举中存在 /// /// 需要判断的参数 /// 枚举类型 /// public static bool IsExist(this int enumValue, Type enumType) { return Enum.IsDefined(enumType, enumValue); } #endregion } }