这看起来有些颠倒,但是我想能够做的是通过其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) { } } }
但是后来我被困住了,如果在那里面做什么。同样也不确定这是否是一开始的方法。
使用此处描述的扩展方法:
Testing t = Enum.GetValues(typeof(Testing)) .Cast<Testing>() .FirstOrDefault(v => v.GetDescription() == descriptionToMatch);
如果找不到匹配的值,它将返回(Testing)0(您可能想None在枚举中为该值定义一个成员)
(Testing)0
None