2013-05-28 2 views
5

Ich habe zwei Funktionen:Type.GetMethod mit einem generischen Überlastung - Get Generisches Method ohne durch alle Methoden Looping

  1. public void DeleteRecord(int id);
  2. public T DeleteRecord<T>(int id);

Hier ist, wie ich versuche, die generische dynamisch aufrufen methode:

MethodInfo method = typeof(DAL).GetMethod("DeleteRecord", new[] { typeof(int) }); 
MethodInfo generic = method.MakeGenericMethod(returnType); 
object o = generic.Invoke(null, new object[] { dbname, spname, expandoAsDictionary }); 

Die erste Zeile t hrows eine Ausnahme, weil es eine mehrdeutige Definition findet. Gibt es eine Möglichkeit, ich kann die MethodInfo der generischen Methode ohne GetMethods und durchlaufen die Ergebnisse für die Frage IsGenericMethod?

Edit: Bitte entfernen Sie die 'Duplicate', da beide der vorgeschlagenen Antworten entweder lösen dies mit einer inneren Schleife (GetMethods(). Wählen Sie ...) oder nicht einmal überlasten.

+0

Dies ist kein Duplikat. Ich weiß bereits, wie man eine generische Methode mit Reflektion aufruft, aber ich habe eine mehrdeutige Definitionsausnahme. Bitte lies meine Frage durch. –

+0

es ist ein Duplikat, aber ich verband die falsche Frage, sorry ... hier ist der richtige: http://Stackoverflow.com/q/5218395/201088. –

+1

immer noch kein dup! Ich habe explizit gefragt, wie man das macht, ohne die GetMethods() Funktion zu benutzen. die Antwort, die in Ihrem Link markiert ist, verwendet es ... –

Antwort

0

Vielleicht nicht die exakte Lösung für Ihr Problem, aber vielleicht könnten Sie mit dieser Lösung zufrieden sein:

var generic = typeof(BadFoo).GetMethods().FirstOrDefault(p => p.IsStatic == true && p.Name == "DeleteRecord" && p.ReturnType == typeof(Int32)); 

ich dachte, dass es wie ein „Fullname“ für die Methode wäre, so GetMethod() Calles könnte mit ein FullName, um die eindeutige Methode zu erhalten. Aber es gibt keine andere Eigenschaft in Method als Name.

+0

Bitte lesen Sie meine Frage durch. Ich fragte, wie man das ohne GetMethods() macht :) –

+0

Wie gesagt, das ist nicht die exakte Lösung. Aber zumindest werden Sie nicht durch die Ergebnisse "schlendern" –

+0

Danke für Ihre Antwort, ich werde darüber nachdenken, es zu verwenden ... Ich bin auf der Suche nach einer Möglichkeit, zwischen den Methoden auf einer höheren Ebene zu unterscheiden, wie Ihre Lösung noch hat eine Schleife hinter den Kulissen (FirstOrDefault) –

Verwandte Themen