2013-05-28 18 views
5

Ho due funzioni:Type.GetMethod con un sovraccarico del generico - Get MethodInfo Generico scorrendo tutti i metodi

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

Ecco come provo a richiamare in modo dinamico il generico metodo:

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

La prima riga t genera un'eccezione perché trova una definizione ambigua. C'è un modo per ottenere il MethodInfo del metodo generico senza utilizzare GetMethods e il looping dei risultati che richiedono IsGenericMethod?

Modifica: Rimuovere il "Duplicato" perché entrambe le risposte suggerite risolvono questo problema con un ciclo interno (GetMethods(). Seleziona ...) o non affrontano nemmeno i sovraccarichi.

+0

Questo non è un duplicato. so già come chiamare un metodo generico con reflection ma ho un'eccezione di definizione ambigua. Si prega di leggere la mia domanda attraverso. –

+0

è un duplicato, ma ho collegato la domanda sbagliata, scusate ... ecco quello corretto: http://stackoverflow.com/q/5218395/201088. –

+1

ancora no dup! ho chiesto esplicitamente come farlo senza usare la funzione GetMethods(). la risposta indicata nel tuo link lo sta usando ... –

risposta

0
non

Forse la soluzione esatta per il vostro problema, ma forse si potrebbe essere soddisfatti di questa soluzione:

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

ho pensato che ci sarebbe come un "FullName" per il metodo, in modo GetMethod() potrebbero essere calles con un FullName per ottenere il metodo univoco. Ma non c'è altra proprietà nel metodo che Nome.

+0

Per favore leggi la mia domanda attraverso. Ho chiesto come fare questo senza GetMethods() :) –

+0

Come ho detto, questa non è la soluzione esatta. Ma almeno non starai "scorrendo i risultati" –

+0

Grazie per la tua risposta, prenderò in considerazione l'idea di usarlo ... Sto cercando un modo per distinguere tra i metodi a un livello più alto come la tua soluzione ha ancora un loop dietro le quinte (FirstOrDefault) –

Problemi correlati