2

尝试创建获取任何枚举属性值的枚举扩展方法时,我遇到了以下情况:

编译 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);
        }
    }
}

在此处输入图像描述

4

1 回答 1

1

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

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

有关扩展方法 + 调试器错误行为的讨论,请参阅此博客文章

于 2012-07-18T14:50:21.947 回答