Selecione o método genérico correto com reflexão

Quero selecionar o método genérico correto via reflexão e depois chamá-lo.

Geralmente isso é bem fácil. Por exemplo

var method = typeof(MyType).GetMethod("TheMethod");
var typedMethod = method.MakeGenericMethod(theTypeToInstantiate);

No entanto, o problema começa quando há diferentes sobrecargas genéricas do método. Por exemplo, os métodos estáticos na classe System.Linq.Queryable. Existem duas definições do método 'Where'

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)

Isso significa que GetMethod não funciona, porque não pode distinguir os dois. Portanto, eu quero selecionar o caminho certo.

Até agora, muitas vezes eu apenas segui o primeiro ou o segundo método, dependendo da minha necessidade. Como isso:

var method = typeof (Queryable).GetMethods().First(m => m.Name == "Where");
var typedMethod = method.MakeGenericMethod(theTypeToInstantiate);

No entanto, não estou feliz com isso, porque assumo que o primeiro método é o correto. Prefiro encontrar o método certo pelo tipo de argumento. Mas não consegui descobrir como.

Eu tentei passar os 'tipos', mas não funcionou.

        var method = typeof (Queryable).GetMethod(
            "Where", BindingFlags.Static,
            null,
            new Type[] {typeof (IQueryable<T>), typeof (Expression<Func<T, bool>>)},
            null);

Então, alguém tem uma idéia de como posso encontrar o método genérico "certo" por meio de reflexão. Por exemplo, a versão correta do método 'Where' em t, a classe Queryable?

questionAnswers(11)

yourAnswerToTheQuestion