从描述属性获取枚举[重复]

我有一个通用的扩展方法,该方法从中获取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(string description)

{

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

回到顶部