Выберите правильный общий метод с отражением

Я хочу выбрать правильный обобщенный метод с помощью отражения, а затем вызвать его.

Обычно это довольно просто. Например

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);

Так что кто-нибудь знает, как я могу найти «правильный» универсальный метод с помощью рефлексии. Например, правильная версия метода «Где» для t, он Queryable-класса?

Ответы на вопрос(11)

Ваш ответ на вопрос