GetValue(...) - 运行时忽略错误

时间:2012-07-18 14:33:34

标签: c# reflection

尝试创建获取任何枚举属性值的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);
        }
    }
}

enter image description here

2 个答案:

答案 0 :(得分:1)

显然,没有GetValue方法只在.Net 4中为PropertyInfo类接受一个参数作为参数

我现在可以看到监视窗口返回某些内容的唯一可能性是,在代码中的某个位置,您的GetValue类型的PropertyInfo扩展方法只需要一个参数作为输入。它可能在您的代码中未知,因为未指定using [PropertyInfoExtensionNamespace]。也许是因为一个未知(或错误)的原因,它以调试器而闻名。

有关扩展方法+调试器错误行为的讨论,请参阅this blog post

答案 1 :(得分:-2)

应该是

 return att.GetType().GetProperty(attributeName).GetValue(att,null);

第二个参数用于索引属性的索引。

不确定手表在做什么,我必须承认。