从描述属性获取枚举[重复]
我有一个通用的扩展方法,该方法从中获取Description
属性Enum
:
enum Animal{
[Description("")]
NotSet = 0,
[Description("Giant Panda")]
GiantPanda = 1,
[Description("Lesser Spotted Anteater")]
LesserSpottedAnteater = 2
}
public static string GetDescription(this Enum value)
{
FieldInfo field = value.GetType().GetField(value.ToString());
DescriptionAttribute attribute
= Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute))
as DescriptionAttribute;
return attribute == null ? value.ToString() : attribute.Description;
}
所以我可以做…
string myAnimal = Animal.GiantPanda.GetDescription(); // = "Giant Panda"
现在,我正在尝试在另一个方向上实现等效功能,例如…
Animal a = (Animal)Enum.GetValueFromDescription("Giant Panda", typeof(Animal));
回答:
public static class EnumEx
{
public static T GetValueFromDescription
{
var type = typeof(T);
if(!type.IsEnum) throw new InvalidOperationException();
foreach(var field in type.GetFields())
{
var attribute = Attribute.GetCustomAttribute(field,
typeof(DescriptionAttribute)) as DescriptionAttribute;
if(attribute != null)
{
if(attribute.Description == description)
return (T)field.GetValue(null);
}
else
{
if(field.Name == description)
return (T)field.GetValue(null);
}
}
throw new ArgumentException(“Not found.”, nameof(description));
// or return default(T);
}
}
用法:
var panda = EnumEx.GetValueFromDescription<Animal>("Giant Panda");
以上是 从描述属性获取枚举[重复] 的全部内容, 来源链接: utcz.com/qa/401237.html