通过描述属性查找枚举值

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

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

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

我希望能够通过提供string“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) { } } } 

但是,然后我被困在内心如果做什么。 也不知道这是否是首先要走的路。

使用这里描述的扩展方法:

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

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

 return field.GetRawConstantValue(); 

如果需要的话,你当然可以把它转换回testing。

好吧,input完所有的信息后,我认为这是一个正确的决定,一开始就导致我走错了路。 枚举看起来是正确的方式去开始,但一个简单的Dictionary<string, int>就足够了,是一个更容易的工作!