在dotnet核心之前,我们能够做到
var member = type.GetMethod(name, bindingFlags, null, argtypes, null);
要访问与其名称和参数类型匹配的方法,在dotnet核心中他们删除了此重载,现在我只能通过name && binding flags
OR name && parameters type
(see),但不喜欢以前。
有一种新方法GetRuntimeMethods,它返回IEnumerable<MethodInfo>
并包含非公开方法,但我无法按参数类型进行过滤。
我可以按参数类型过滤另一种方法GetRuntimeMethod,但它不包含非公开方法。
我已经尝试过这样的事情但是失败了
var member = type.GetRuntimeMethods().Where(m =>
m.Name == name && (m.GetParameters().Select(p => p.GetType()).ToArray() == argtypes)).FirstOrDefault();
有没有办法通过名称和参数类型获取方法?
答案 0 :(得分:2)
是的,确实缺少重载。您可以使用的是使用GetMethods()
并按您希望的方式过滤输出。您的尝试很接近,除非您无法使用==
比较数组:
var method = type.GetMethods().FirstOrDefault(m =>
m.Name == name && m.GetParameters().Select(p => p.ParameterType).SequenceEqual(argTypes));