为什么要这样:枚举不能直接 7B195988-4489-EC11-80EF-C2916A009EE3 = 1 这样写,
所以只能加上
[Description("7B195988-4489-EC11-80EF-C2916A009EE3 ")]
然后去获取这个描述
如何获取处理:
// 枚举
public enum enumStudent
{
[Description("性别")]
sex = 0,
[Description("年龄")]
age = 1,
}
// 获取描述
public string GetDescriptionByEnum(Enum enumValue)
{
string value = enumValue.ToString();
System.Reflection.FieldInfo field = enumValue.GetType().GetField(value);
object[] objs = field.GetCustomAttributes(typeof(DescriptionAttribute), false); //获取描述属性
if (objs.Length == 0) //当描述属性没有时,直接返回名称
return value;
DescriptionAttribute descriptionAttribute = (DescriptionAttribute)objs[0];
return descriptionAttribute.Description;
}
// 调用示例
GetDescriptionByEnum(enumStudent.age) → 年龄
//通过描述获取对应的枚举
public T GetEnumByDescription<T>(string description) where T : Enum
{
System.Reflection.FieldInfo[] fields = typeof(T).GetFields();
foreach(System.Reflection.FieldInfo field in fields)
{
object[] objs = field.GetCustomAttributes(typeof(DescriptionAttribute), false); //获取描述属性
if (objs.Length > 0 && (objs[0] as DescriptionAttribute).Description == description)
{
return (T)field.GetValue(null);
}
}
throw new ArgumentException(string.Format("{0} 未能找到对应的枚举.", description), "Description");
}
// 调用示例
GetEnumByDescription<enumStudent>("性别").ToString() → sex