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

时间:2016-06-08 16:40:08

标签: c# asp.net-core .net-core-rc2

在dotnet核心之前,我们能够做到

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

要访问与其名称和参数类型匹配的方法,在dotnet核心中他们删除了此重载,现在我只能通过name && binding flags OR name && parameters typesee),但不喜欢以前。

有一种新方法GetRuntimeMethods,它返回IEnumerable<MethodInfo>并包含非公开方法,但我无法按参数类型进行过滤。

我可以按参数类型过滤另一种方法GetRuntimeMethod,但它不包含非公开方法。

我已经尝试过这样的事情但是失败了

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

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

1 个答案:

答案 0 :(得分:2)

是的,确实缺少重载。您可以使用的是使用GetMethods()并按您希望的方式过滤输出。您的尝试很接近,除非您无法使用==比较数组:

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