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

C# 如何通过反射匹配名称和参数类型来获得受保护的方法?,c#,asp.net-core,.net-core-rc2,C#,Asp.net Core,.net Core Rc2,在dotnet core之前,我们能够 var member=type.GetMethod(名称、bindingFlags、null、argtypes、null); 为了访问与其名称和参数类型匹配的方法,在dotnet core中,他们删除了这个重载,现在我只能通过name&&binding flags或name&¶meters type()来获取,但不像以前那样 有一个新方法返回IEnumerable,其中包括非公共方法,但我不能按参数类型进行筛选 还有另一种方法,我可以按参数类型进

在dotnet core之前,我们能够

var member=type.GetMethod(名称、bindingFlags、null、argtypes、null);
为了访问与其名称和参数类型匹配的方法,在dotnet core中,他们删除了这个重载,现在我只能通过
name&&binding flags
name&¶meters type
()来获取,但不像以前那样

有一个新方法返回
IEnumerable
,其中包括非公共方法,但我不能按参数类型进行筛选

还有另一种方法,我可以按参数类型进行筛选,但它不包括非公共方法

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

var member=type.GetRuntimeMethods()。其中(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));

我认为您不能像这样比较数组:
m.GetParameters().Select(p=>p.GetType()).ToArray()==argtypes)
-它不会比较数组项,而是比较数组引用,所以它总是false。您可以使用
Zip
SequenceEqual
来比较数组内容。我的错!工作起来很有魅力,我只需要将p.GetType()更改为p.ParameterType。Tks