如何获取MethodInfo的通用扩展方法?

时间:2013-07-10 12:40:28

标签: c# linq generics reflection extension-methods

我有一个IEnumerable<T>,我希望通过反思来调用Enumerable.Contains方法。我只是在努力使语法正确。这是我现在拥有的:

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

这只是返回null。

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

1 个答案:

答案 0 :(得分:17)

  

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

你必须找到泛型方法 - 不幸的是有点痛苦 - 然后用适当的参数构造它。在这种情况下,您知道只有2个Contains重载,而您想要的重载有两个参数,因此您可以使用:

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

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