尝试创建获取任何枚举属性值的Enum扩展方法,我遇到以下情况:
当编译VS 2010下面的代码时,显示错误:方法'GetValue'没有重载需要1个参数。 在评论代码和使用监视工具时 - 该行返回值(参见附图)。
知道为什么吗?
public static class EnumExtensions
{
public static IEnumerable<object> GetAttributeValue(this Enum enm, Type attribute, string attributeName)
{
FieldInfo fi = enm.GetType().GetField(enm.ToString());
var fiAtts = fi.GetCustomAttributes(attribute, false);
if (fiAtts.Length == 0)
return null;
foreach (var att in fiAtts)
{
//VS2010 throws an error: No overload for method 'GetValue' takes 1 argument
//yield ==> Ignore
return att.GetType().GetProperty(attributeName).GetValue(att);
}
}
}
答案 0 :(得分:1)
显然,没有GetValue
方法只在.Net 4中为PropertyInfo类接受一个参数作为参数
我现在可以看到监视窗口返回某些内容的唯一可能性是,在代码中的某个位置,您的GetValue
类型的PropertyInfo
扩展方法只需要一个参数作为输入。它可能在您的代码中未知,因为未指定using [PropertyInfoExtensionNamespace]
。也许是因为一个未知(或错误)的原因,它以调试器而闻名。
有关扩展方法+调试器错误行为的讨论,请参阅this blog post。
答案 1 :(得分:-2)
应该是
return att.GetType().GetProperty(attributeName).GetValue(att,null);
第二个参数用于索引属性的索引。
不确定手表在做什么,我必须承认。