Я хочу выбрать правильный общий метод с помощью отражения, а затем вызвать его.
Обычно это довольно просто. Например
var method = typeof(MyType).GetMethod("TheMethod");
var typedMethod = method.MakeGenericMethod(theTypeToInstantiate);
Однако проблема возникает, когда возникают разные общие перегрузки метода. Например, статические методы в классе System.Linq.Queryable. Существует два определения "Where'-method"
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?