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

我有一个IEnumerable ,我想通过reflection调用Enumerable.Contains方法。 我只是在努力使语法正确。 这是我现在拥有的:

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

这只是返回null。

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

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

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

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

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