C#通過反射進行枚舉描述相關操作


C#可以通過反射,來獲取枚舉的描述信息或通過描述信息獲取到指定類型的枚舉

 1 /// <summary>
 2 /// 獲取枚舉描述
 3 /// </summary>
 4 /// <param name="enumName"></param>
 5 /// <returns></returns>
 6 public static string GetDescription(this Enum enumName)
 7 {
 8     string description;
 9     FieldInfo fieldInfo = enumName.GetType().GetField(enumName.ToString());
10     DescriptionAttribute[] attributes = fieldInfo.GetDescriptAttr();
11     if (attributes != null && attributes.Length > 0)
12         description = attributes[0].Description;
13     else
14         throw new ArgumentException($"{enumName} 未能找到對應的枚舉描述.", nameof(enumName));
15     return description;
16 }
17 
18 /// <summary>
19 /// 獲取枚舉描述屬性
20 /// </summary>
21 /// <param name="fieldInfo"></param>
22 /// <returns></returns>
23 private static DescriptionAttribute[] GetDescriptAttr(this FieldInfo fieldInfo)
24 {
25     return (DescriptionAttribute[])fieldInfo?.GetCustomAttributes(typeof(DescriptionAttribute), false);
26 }
27 
28 /// <summary>
29 /// 通過描述獲取枚舉值
30 /// </summary>
31 /// <typeparam name="TEnum"></typeparam>
32 /// <param name="description"></param>
33 /// <returns></returns>
34 public static TEnum GetEnum<TEnum>(string description)
35 {
36     Type type = typeof(TEnum);
37     foreach (FieldInfo field in type.GetFields())
38     {
39         DescriptionAttribute[] curDesc = field.GetDescriptAttr();
40         if (curDesc != null && curDesc.Length > 0)
41         {
42             if (curDesc[0].Description == description)
43                 return (TEnum)field.GetValue(null);
44         }
45         else
46         {
47             if (field.Name == description)
48                 return (TEnum)field.GetValue(null);
49         }
50     }
51     throw new ArgumentException($"{description} 未能找到對應的枚舉.", nameof(description));
52 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM