有些时候,我们会利用枚举来进行数据映射,通过会在枚举上添加
Description
特性来标记映射的值。
本文介绍如何获取枚举上的描述。
枚举定义:
1 2 3 4 5 6 7 8
| public enum BookType { [Descrption("语文")] Chinese, [Descrption("数学")] Math }
|
通过枚举获取描述:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
public static string GetDescription(this Enum @enum) { string value = @enum.ToString(); FieldInfo field = @enum.GetType().GetField(value); object[] objs = field.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (objs.Length == 0) return value;
DescriptionAttribute descriptionAttribute = (DescriptionAttribute)objs[0];
return descriptionAttribute.Description; }
|
通过描述获取枚举:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
public static T GetEnumByDescription<T>(this string description) where T : Enum { FieldInfo[] fields = typeof(T).GetFields();
foreach(var field in fields) { object[] objs = field.GetCustomAttributes(typeof(DescriptionAttribute), false); if(objs.Length>0 && objs[0] is DescriptionAttribute da && da.Description == description) { return (T)field.GetValue(null); } }
throw new DllNotFoundException($"not found {description}"); }
|