小编典典

通过其描述属性查找枚举值

c#

这看起来有些颠倒,但是我想能够做的是通过其Description属性从枚举中获取枚举值。

所以,如果我有一个枚举声明如下:

enum Testing
{
    [Description("David Gouge")]
    Dave = 1,
    [Description("Peter Gouge")]
    Pete = 2,
    [Description("Marie Gouge")]
    Ree = 3
}

我想通过提供字符串“ Peter Gouge”来获得2。

首先,我可以遍历枚举字段并使用正确的属性获取该字段:

string descriptionToMatch = "Peter Gouge";
FieldInfo[] fields = typeof(Testing).GetFields();

foreach (FieldInfo field in fields)
{
    if (field.GetCustomAttributes(typeof(DescriptionAttribute), false).Count() > 0)
    {
        if (((DescriptionAttribute)field.GetCustomAttributes(typeof(DescriptionAttribute), false)[0]).Description == descriptionToMatch)
        {

        }
    }
}

但是后来我被困住了,如果在那里面做什么。同样也不确定这是否是一开始的方法。


阅读 391

收藏
2020-05-19

共1个答案

小编典典

使用此处描述的扩展方法:

Testing t = Enum.GetValues(typeof(Testing))
                .Cast<Testing>()
                .FirstOrDefault(v => v.GetDescription() == descriptionToMatch);

如果找不到匹配的值,它将返回(Testing)0(您可能想None在枚举中为该值定义一个成员)

2020-05-19