这看起来有点颠倒,但我想要做的是通过其Description属性从枚举中获取枚举值。通过其描述属性查找枚举值
所以,如果我有一个枚举声明如下:
enum Testing
{
[Description("David Gouge")]
Dave = 1,
[Description("Peter Gouge")]
Pete = 2,
[Description("Marie Gouge")]
Ree = 3
}
我希望能够通过提供字符串“彼得凿击”获得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)
{
}
}
}
但后来我卡为在内心的,如果做什么。也不知道这是否是首先要走的路。
啊,LINQ再次救援。我非常喜欢这个解决方案,谢谢! – DavidGouge 2010-08-06 09:24:56
-1:在此代码中创建的额外对象:1)RuntimeType,2)转换迭代器,3)lambda对象,4)WhereIterator。用Ani的解决方案创建额外的对象;没有。 – Henrik 2011-03-01 13:45:05
@Henrik,你只是忘了一件事:Ani的解决方案假设你已经有了FieldInfo,并且你需要使用反射来获得它......我的解决方案不使用反射; GetValues是使用本机代码在内部实现的,所以它比使用反射快得多(根据我的测试,速度至少快5倍)。与反射相比,创建RuntimeType和WhereIterator的成本可以忽略不计。至于“lambda对象”,没有这种东西......它只是在当前类型中创建的匿名方法。 – 2011-03-01 14:14:53