c# - WP7 : Type. GetMethods 抛出 MethodAccessException。这个错误有解决方法吗?

标签 c# .net reflection windows-phone-7

我试图获取一个类型的所有方法的列表。 Type 提供了 GetMethods 方法来执行此操作。但不幸的是,它似乎没有正确实现。只要反射类型上没有没有重写的通用方法,它就可以正常工作。在这种特殊情况下,会抛出 MethodAccessException。

有人有解决此 WP7 错误的方法吗?如果返回除通用方法之外的所有方法,我很好。

这是一个将抛出异常的类的示例。注意:none 泛型返回值是为了证明返回值不涉及问题。此外,可以将基方法更改为抽象方法,问题仍然存在。

public abstract class BaseClassWithGenericMethod
{
    public virtual System.Collections.IList CreateList<T>()
    {
        return new List<T>();
    }
}

public class DerivedClassWithGenericMethod 
    : BaseClassWithGenericMethod
{
    public override System.Collections.IList CreateList<T>()
    {
        return new List<T>();
    }
}

最佳答案

我会全部获取它们(注意 GetMethods 中的 BindingFlags.DeclaredOnly),然后过滤掉那些通用方法(MethodInfo.IsGenericMethod).

对不起 VB,我知道现在全世界都想要 C#,但是...

Public Function GetListOfMethods() As List(Of MethodInfo)
    Dim d As New DerivedClassWithGenericMethod
    Dim myArrayMethodInfo() As Reflection.MethodInfo
    myArrayMethodInfo = d.GetType.GetMethods(BindingFlags.Instance _
                                              Or BindingFlags.Public _
                                              Or BindingFlags.DeclaredOnly)

    Dim myArrayMethodInfoList As New List(Of MethodInfo)
    For Each m As MethodInfo In myArrayMethodInfo
        If Not m.IsGenericMethod Then
            myArrayMethodInfoList.Add(m)
        End If
    Next
    Return myArrayMethodInfoList
End Function

我刚刚使用您的示例类在 WP7 上进行了测试,它运行良好。

关于c# - WP7 : Type. GetMethods 抛出 MethodAccessException。这个错误有解决方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5639376/

相关文章:

java - 反射是否要求在字节码中写入文字字符串?

c# - RegEx 帮助 - 从 JavaScript 转换为 C#

c# - 当按下按钮或按键时,如何在AvalonDock中从一个选项卡转到另一个选项卡?

c# - 如何使用 javascript 将 C# 变量分配给 asp 元素

c# - 是否可以将 Assembly.ReflectionOnlyLoad 与发布者策略/程序集版本控制一起使用?

c# - 带有AllowsTransparency = true的ResizeMode.CanResize不起作用

c# - 如何在运行时暂时禁用捆绑和缩小?

c# - BindingList<> 更改时 UI 未更新

C#自定义复制构造函数,复制事件

c# - 确定代码是否作为单元测试的一部分运行