Я хочу выбрать правильный обобщенный метод с помощью отражения и затем вызвать его.
Обычно это довольно просто.Например,
var method = typeof(MyType).GetMethod("TheMethod");
var typedMethod = method.MakeGenericMethod(theTypeToInstantiate);
Однако проблема возникает, когда существуют различные общие перегрузки метода.Например, статические методы в классе System.Linq.Queryable.Существует два определения метода «Где»
static IQueryable<T> Where(this IQueryable<T> source, Expression<Func<T,bool>> predicate)
static IQueryable<T> Where(this IQueryable<T> source, Expression<Func<T,int,bool>> predicate)
Это означает, что GetMethod не работает, потому что он не может их описать.Поэтому я хочу выбрать правильный.
До сих пор я часто использовал первый или второй метод, в зависимости от моих потребностей.Вот так:
var method = typeof (Queryable).GetMethods().First(m => m.Name == "Where");
var typedMethod = method.MakeGenericMethod(theTypeToInstantiate);
Однако я не доволен этим, потому что я делаю огромное предположение, что первый метод - правильный.Я скорее хочу найти правильный метод по типу аргумента.Но я не мог понять, как.
Я попробовал это с передачей 'типов', но это не сработало.
var method = typeof (Queryable).GetMethod(
"Where", BindingFlags.Static,
null,
new Type[] {typeof (IQueryable<T>), typeof (Expression<Func<T, bool>>)},
null);
Так что кто-нибудь знает, как мне найти«правильный» универсальный метод через рефлексию.Например, правильная версия метода Where в Queryable-классе?