如何获取泛型扩展方法的MethodInfo

本文关键字:扩展 方法 MethodInfo 泛型 何获取 获取 | 更新日期: 2023-09-27 18:21:59

我有一个IEnumerable<T>,我想通过反射调用Enumerable.Contains方法。我只是在努力把语法弄对。这是我目前拥有的:

var containsMethod = typeof(Enumerable).GetMethod("Contains", 
  new[] {
    typeof(IEnumerable<T>), 
    typeof(T) 
  });

这只是返回一个null。

获取MethodInfo的正确方法是什么?

如何获取泛型扩展方法的MethodInfo

获取MethodInfo的正确方法是什么?

你必须找到通用方法——不幸的是,这有点麻烦——然后用适当的参数构造它。在这种情况下,您知道只有2个Contains重载,并且您想要的那个重载有两个参数,所以您可以使用:

var method = typeof(Enumerable).GetMethods()
                               .Where(m => m.Name == "Contains")
                               .Single(m => m.GetParameters().Length == 2)
                               .MakeGenericMethod(typeof(T));

然后,您应该能够适当地调用它。