【.NET反射】两种方式获取Enum中的值

public enum EJobType
    {
        客服 = 1, 业务员 = 2, 财务 = 3, 经理 = 4
    }
Type jobType = typeof(EJobType);

方式1:

Array enumItems = Enum.GetValues(jobType);
            foreach (var enumItem in enumItems)
            {
                int value = (int)enumItem;
                string text = enumItem.ToString();
            }

方式2:

FieldInfo[] fields = jobType.GetFields(BindingFlags.Static | BindingFlags.Public);//
            foreach (var field in fields)
            {
               string text =  field.Name;
               object value = field.GetRawConstantValue();
            }

 

再分享一个Enum的扩展:

  1 public static class EnumExtensions
  2     {
  3         /// <summary>
  4         /// 枚举信息
  5         /// </summary>
  6         public class EnumInfo<T>
  7         {
  8             /// <summary>
  9             /// 枚举名称
 10             /// </summary>
 11             public string Name { get; set; }
 12             /// <summary>
 13             /// 显示的名称
 14             /// </summary>
 15             public string DisplayName { get; set; }
 16             /// <summary>
 17             /// 18             /// </summary>
 19             public T Value { get; set; }
 20             /// <summary>
 21             /// 描述
 22             /// </summary>
 23             public string Description { get; set; }
 24         }
 25 
 26 
 27         /// <summary>
 28         /// 获取枚举值的名称
 29         /// </summary>
 30         /// <param name="value"></param>
 31         /// <returns></returns>
 32         public static string GetName(this Enum value)
 33         {
 34             return Enum.GetName(value.GetType(), value);
 35         }
 36         /// <summary>
 37         ///  获取该枚举的显示值(如果使用了DisplayAttribute 标签则显示描述中的别名,否则使用 Enum 的名称。)
 38         /// </summary>
 39         /// <param name="value"></param>
 40         /// <returns></returns>
 41         public static string GetText(this Enum value)
 42         {
 43             FieldInfo fi = value.GetType().GetField(value.ToString());
 44             if (fi == null)
 45             {
 46                 return string.Empty;
 47             }
 48 
 49             DisplayAttribute[] attributes = (DisplayAttribute[])fi.GetCustomAttributes(typeof(DisplayAttribute), false);
 50             if ((attributes != null) && (attributes.Length > 0))
 51                 return attributes[0].Name;
 52             else
 53                 return value.ToString();
 54         }
 55 
 56 
 57         /// <summary>
 58         /// 获取枚举代表的值
 59         /// </summary>
 60         /// <param name="value"></param>
 61         /// <returns></returns>
 62         public static int GetValue(this Enum value)
 63         {
 64             return Convert.ToInt32(value);
 65         }
 66         public static T Parse<T>(this Enum enumThis, int value)
 67         {
 68             return (T)Enum.Parse(enumThis.GetType(), value.ToString());
 69         }
 70         public static T Parse<T>(this Enum enumThis, string value)
 71         {
 72             return (T)Enum.Parse(enumThis.GetType(), value);
 73         }
 74         /// <summary>
 75         /// 根据Name获取Value
 76         /// </summary>
 77         /// <param name="value"></param>
 78         /// <returns></returns>
 79         public static int GetEnumValue(Type enumType, string enumName)
 80         {
 81             return (int)Enum.Parse(enumType, enumName);
 82         }
 83         /// <summary>
 84         /// 获取枚举信息(名称,值,描述)
 85         /// </summary>
 86         /// <returns></returns>
 87         public static List<EnumInfo<T>> GetEnumInfo<T>(this Type enumType)
 88         {
 89             if (!enumType.IsEnum) throw new InvalidOperationException("type not a enum!");
 90             List<EnumInfo<T>> emInfos = new List<EnumInfo<T>>();
 91             var fields = enumType.GetFields(BindingFlags.Static | BindingFlags.Public);
 92             foreach (var fi in fields)
 93             {
 94                 EnumInfo<T> emInfo = new EnumInfo<T>();
 95                 emInfo.Name = fi.Name;
 96                 emInfo.Value = (T)fi.GetRawConstantValue();
 97                 var displayAttr = fi.GetCustomAttributes(typeof(DisplayAttribute), false).FirstOrDefault();
 98                 if (displayAttr != null)
 99                 {
100                     emInfo.DisplayName = ((DisplayAttribute)displayAttr).Name;
101                     emInfo.Description = ((DisplayAttribute)displayAttr).Description;
102                 }
103                 var desAttr = fi.GetCustomAttributes(typeof(DescriptionAttribute), false).FirstOrDefault();
104                 if (desAttr != null)
105                 {
106                     emInfo.Description = ((DescriptionAttribute)desAttr).Description;
107                 }
108                 if (string.IsNullOrWhiteSpace(emInfo.Description))
109                 {
110                     emInfo.Description = fi.Name;
111                 }
112                 if (string.IsNullOrWhiteSpace(emInfo.DisplayName))
113                 {
114                     emInfo.DisplayName = fi.Name;
115                 }
116                 emInfos.Add(emInfo);
117             }
118             return emInfos;
119         }
120         public static List<EnumInfo<object>> GetEnumInfo(this Type enumType)
121         {
122             return GetEnumInfo<object>(enumType);
123         }
124     }

 

posted @ 2019-12-03 09:42  .Neterr  阅读(4218)  评论(0编辑  收藏  举报