Seleccione el método genérico correcto con reflexión

Quiero seleccionar el método genérico correcto mediante reflexión y luego llamarlo.

Por lo general, esto es bastante fácil. Por ejemplo

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

Sin embargo, el problema comienza cuando hay diferentes sobrecargas genéricas del método. Por ejemplo, los métodos estáticos en System.Linq.Queryable-class. Hay dos definiciones del método 'Dónde'

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)

Esto significa que GetMethod no funciona, porque no puede eliminar los dos. Por lo tanto, quiero seleccionar el correcto.

Hasta ahora, a menudo solo tomé el primer o segundo método, dependiendo de mi necesidad. Me gusta esto:

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

Sin embargo, no estoy contento con esto, porque supongo que el primer método es el correcto. Prefiero encontrar el método correcto por tipo de argumento. Pero no pude entender cómo.

Lo intenté pasando los 'tipos', pero no funcionó.

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

Entonces, ¿alguien tiene una idea de cómo puedo encontrar el método genérico 'correcto' a través de la reflexión? Por ejemplo, la versión correcta del método 'Where' en t, he Queryable-class?

Respuestas a la pregunta(11)

Su respuesta a la pregunta