我有一个 IEnumerable<T>
,我想通过反射调用 Enumerable.Contains
方法。我只是在努力弄清楚语法。这是我目前的代码:
var containsMethod = typeof(Enumerable).GetMethod("Contains",
new[] {
typeof(IEnumerable<T>),
typeof(T)
});
这只会返回一个 null。
获取 MethodInfo
的正确方式是什么?
我有一个 IEnumerable<T>
,我想通过反射调用 Enumerable.Contains
方法。我只是在努力弄清楚语法。这是我目前的代码:
var containsMethod = typeof(Enumerable).GetMethod("Contains",
new[] {
typeof(IEnumerable<T>),
typeof(T)
});
这只会返回一个 null。
获取 MethodInfo
的正确方式是什么?
如何正确获取MethodInfo?
您需要找到适当的参数并构造出通用方法,但这有点麻烦。在这种情况下,您知道只有两个Contains
重载,而您想要的那个重载有两个参数,因此可以使用:
var method = typeof(Enumerable).GetMethods()
.Where(m => m.Name == "Contains")
.Single(m => m.GetParameters().Length == 2)
.MakeGenericMethod(typeof(T));
Where
中的检查折叠到 Single
中,即 m => m.Name == "Contains" && m.GetParameters().Length == 2
。 - Sergey KalinichenkoGetMethods(types: (Type T) => new Type[] { typeof(IEnumerable<>).WithGenericTypes(T), T })
- 通过表达式。你认为这样的语法真的有必要吗?它可以更好地编写吗? - Viktor Lova