Wählen Sie die richtige generische Methode mit Reflection

Ich möchte die richtige generische Methode über Reflection auswählen und sie dann aufrufen.

ormalerweise ist das ganz einfach. Beispielsweis

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

Das Problem tritt jedoch auf, wenn es unterschiedliche generische Überladungen der Methode gibt. Zum Beispiel die statischen Methoden in der System.Linq.Queryable-Klasse. Es gibt zwei Definitionen der 'Where'-Methode

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)

Dies hat zur Folge, dass GetMethod nicht funktioniert, da es die beiden nicht unterscheiden kann. Deshalb möchte ich die richtige auswählen.

Bisher habe ich oft nur die erste oder zweite Methode gewählt, je nach meinem Bedarf. So was

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

Aber ich bin damit nicht zufrieden, weil ich eine große Annahme mache, dass die erste Methode die richtige ist. Ich möchte lieber die richtige Methode anhand des Argumenttyps finden. Aber ich konnte nicht herausfinden, wie.

Ich habe es mit der Übergabe der 'Typen' versucht, aber es hat nicht funktioniert.

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

So hat jemand eine Idee, wie ich die "richtige" generische Methode über Reflektion finden kann. Zum Beispiel die richtige Version der 'Where'-Methode für die Queryable-Klasse?

Antworten auf die Frage(22)

Ihre Antwort auf die Frage