小编典典

从描述属性获取枚举

all

我有一个通用的扩展方法,它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));

阅读 70

收藏
2022-05-29

共1个答案

小编典典

public static class EnumEx
{
public static T GetValueFromDescription(string description) where T : Enum
{
foreach(var field in typeof(T).GetFields())
{
if (Attribute.GetCustomAttribute(field,
typeof(DescriptionAttribute)) is DescriptionAttribute attribute)
{
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");
2022-05-29