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?