2010-06-08 5 views
2

J'essaie d'invoquer une méthode avec la réflexion qui a un type générique de retour, comme ceci:Comment appeler une méthode avec un type générique de retour en utilisant la réflexion

public class SomeClass<T> 
{ 
    public List<T> GetStuff(); 
}  

Je reçois une instance de SomeClass avec appel à la méthode générique GetClass<T> du référentiel.

MethodInfo lGetSomeClassMethodInfo = typeof(IRepository) 
    .GetMethod("GetClass") 
    .MakeGenericMethod(typeof(SomeClass<>); 
object lSomeClassInstance = lGetSomeClassMethodInfo.Invoke(
    lRepositoryInstance, null); 

Après cela, c'est là que je tente d'invoquer la méthode GetStuff:

typeof(SomeClass<>).GetMethod("GetStuff").Invoke(lSomeClassInstance, null) 

Je reçois une exception sur le fait que la méthode a des arguments génériques. Cependant, je ne peux pas utiliser MakeGenericMethod pour résoudre le type de retour. En outre, si au lieu de typeof(SomeClass<>) j'utilise lSomeClassInstance.GetType() (qui devrait avoir des types résolus) GetMethod("GetStuff") renvoie null!

MISE À JOUR

J'ai trouvé la solution et sera bientôt poster la réponse.

Répondre

1

Pour une raison quelconque, l'instance de SomeClass retournée par GetClass, même après que les types ont été résolus, ne vous permet pas d'appeler la méthode GetStuff. La ligne du bas est que vous devez simplement construire SomeClass en premier, puis invoquer la méthode. Comme ceci:

typeof(SomeClass<>) 
    .MakeGenericType(StuffType) 
    .GetMethod("GetStuff") 
    .Invoke(lSomeClassInstance, null); 
Questions connexes