我有一个IEnumerable<T>
,我希望通过反思来调用Enumerable.Contains
方法。我只是在努力使语法正确。这是我现在拥有的:
var containsMethod = typeof(Enumerable).GetMethod("Contains",
new[] {
typeof(IEnumerable<T>),
typeof(T)
});
这只是返回null。
获取MethodInfo
的正确方法是什么?
答案 0 :(得分:17)
获取MethodInfo的正确方法是什么?
你必须找到泛型方法 - 不幸的是有点痛苦 - 然后用适当的参数构造它。在这种情况下,您知道只有2个Contains
重载,而您想要的重载有两个参数,因此您可以使用:
var method = typeof(Enumerable).GetMethods()
.Where(m => m.Name == "Contains")
.Single(m => m.GetParameters().Length == 2)
.MakeGenericMethod(typeof(T));
然后你应该能够适当地调用它。