如何通过反射匹配名称和参数类型获取受保护的方法?

How can I get a protected method via reflection matching name and parameters type?

在 dotnet core 之前我们可以做到

var member = type.GetMethod(name, bindingFlags, null, argtypes, null);

为了访问与其名称和参数类型匹配的方法,在 dotnet 核心中他们删除了这个重载,现在我只能通过 name && binding flagsname && parameters type (see) , 但不像以前那样。

有一个新方法 GetRuntimeMethods,其中 returns IEnumerable<MethodInfo> 包括非 public 方法,但我无法按参数类型过滤。

还有另一种方法 GetRuntimeMethod,我可以按参数类型过滤,但它不包括非 public 方法。

我已经尝试过类似的方法,但失败了

var member = type.GetRuntimeMethods().Where(m =>
m.Name == name && (m.GetParameters().Select(p => p.GetType()).ToArray() == argtypes)).FirstOrDefault();

有没有办法通过名称和参数类型获取方法?

是的,确实缺少那个过载。您可以使用的是 GetMethods() 并按照您想要的方式过滤输出。您的尝试很接近,除了您不能使用 ==:

比较数组
var method = type.GetMethods().FirstOrDefault(m =>
    m.Name == name && m.GetParameters().Select(p => p.ParameterType).SequenceEqual(argTypes));