using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using System.ComponentModel; namespace ICSSoft.Common { public static class EnumHelper { #region 获取枚举注解 /// /// 判单枚举中是否包含该枚举描述 /// /// /// /// public static bool HasDescriptions(Type enumType,string desc) { //if (enumType != null && enumType.IsEnum) //{ // FieldInfo[] fields = enumType.GetFields(); // for (int i = 1; i < fields.Length; ++i) // { // //object fieldValue = Enum.Parse(enumType, fields[i].Name); // object[] attrs = fields[i].GetCustomAttributes(true); // foreach (object attr in attrs) // { // if (typeof(DescriptionAttribute).IsAssignableFrom(attr.GetType()) && ((DescriptionAttribute)attr).Description.Equals(desc)) // { // return true; // } // } // } //} if (NewTransType.list.Contains(desc)) { return true; } return false; } #endregion #region 获取枚举注解DBValue /// /// 判单枚举中是否包含该枚举描述 /// /// /// /// public static string GetDBValue(Type enumType, string desc) { if (enumType != null && enumType.IsEnum) { FieldInfo[] fields = enumType.GetFields(); for (int i = 1; i < fields.Length; ++i) { //object fieldValue = Enum.Parse(enumType, fields[i].Name); object[] attrs = fields[i].GetCustomAttributes(true); bool match = false; foreach (object attr in attrs) { if (typeof(DescriptionAttribute).IsAssignableFrom(attr.GetType()) && ((DescriptionAttribute)attr).Description.Equals(desc)) { match = true; continue; } if (match) return ((ICSSoft.Common.DBValue)attr).Description; } } } return ""; } #endregion public static string GetDescription(this Enum em) where Attr : AttrDescription { Type enumType = em.GetType(); var name = Enum.GetName(enumType, em); if (name == null) return string.Empty; object[] objs = enumType.GetField(name).GetCustomAttributes(typeof(Attr), false); if (objs == null || objs.Length == 0) return string.Empty; Attr attr = objs[0] as Attr; return attr.Description; } public static string GetDescription(this Enum em) { Type enumType = em.GetType(); var name = Enum.GetName(enumType, em); if (name == null) return string.Empty; object[] objs = enumType.GetField(name).GetCustomAttributes(typeof(System.ComponentModel.DescriptionAttribute), false); if (objs == null || objs.Length == 0) return string.Empty; System.ComponentModel.DescriptionAttribute attr = objs[0] as System.ComponentModel.DescriptionAttribute; return attr.Description; } } #region 用于枚举的特性类 public class AttrDescription : Attribute { private string _showName; public AttrDescription(string desc) { _showName = desc; } public string Description { get { return _showName; } } } public class DBValue : AttrDescription { public DBValue(string desc) : base(desc) { } } //public class DescriptionEn : AttrDescription //{ // public DescriptionEn(string desc) // : base(desc) // { // } //} #endregion }