从描述属性获取Enum

从描述属性获取Enum

我有一个泛型扩展方法,它获取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));


MM们
浏览 588回答 3
3回答

拉风的咖菲猫

与其使用扩展方法,不如尝试一些静态方法。public&nbsp;static&nbsp;class&nbsp;Utility{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;string&nbsp;GetDescriptionFromEnumValue(Enum&nbsp;value) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DescriptionAttribute&nbsp;attribute&nbsp;=&nbsp;value.GetType() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.GetField(value.ToString()) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.GetCustomAttributes(typeof&nbsp;(DescriptionAttribute),&nbsp;false) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.SingleOrDefault()&nbsp;as&nbsp;DescriptionAttribute; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;attribute&nbsp;==&nbsp;null&nbsp;?&nbsp;value.ToString()&nbsp;:&nbsp;attribute.Description; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;T&nbsp;GetEnumValueFromDescription<T>(string&nbsp;description) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;type&nbsp;=&nbsp;typeof(T); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!type.IsEnum) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;ArgumentException(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FieldInfo[]&nbsp;fields&nbsp;=&nbsp;type.GetFields(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;field&nbsp;=&nbsp;fields&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.SelectMany(f&nbsp;=>&nbsp;f.GetCustomAttributes( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typeof(DescriptionAttribute),&nbsp;false),&nbsp;( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f,&nbsp;a)&nbsp;=>&nbsp;new&nbsp;{&nbsp;Field&nbsp;=&nbsp;f,&nbsp;Att&nbsp;=&nbsp;a&nbsp;}) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Where(a&nbsp;=>&nbsp;((DescriptionAttribute)a.Att) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Description&nbsp;==&nbsp;description).SingleOrDefault(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;field&nbsp;==&nbsp;null&nbsp;?&nbsp;default(T)&nbsp;:&nbsp;(T)field.Field.GetRawConstantValue(); &nbsp;&nbsp;&nbsp;&nbsp;}}在这里使用var&nbsp;result1&nbsp;=&nbsp;Utility.GetDescriptionFromEnumValue( &nbsp;&nbsp;&nbsp;&nbsp;Animal.GiantPanda);var&nbsp;result2&nbsp;=&nbsp;Utility.GetEnumValueFromDescription<Animal>( &nbsp;&nbsp;&nbsp;&nbsp;"Lesser&nbsp;Spotted&nbsp;Anteater");
打开App,查看更多内容
随时随地看视频慕课网APP