2009-10-08 7 views
3

je une classe générique en C#, comme ceci:C# obtenir le type générique <T> donné T

public class GenericClass<T> { ... } 

Maintenant, j'ai l'objet Type pour un objet, et je voudrais, par la réflexion ou autrement , pour obtenir l'objet Type pour GenericClass<T> où T correspond à cet objet Type j'ai mon objet.

Comme ceci:

Type requiredT = myobject.GetType(); 
    Type wantedType = typeof(GenericClass<requiredT>); 

Il est évident que cette syntaxe ne fonctionne pas, mais comment puis-je le faire?

+0

Pouvez-vous expliquer ce mieux? –

Répondre

9

Oui, vous pouvez:

Type requiredT = ... 
Type genericType = typeof(GenericClass<>); 
Type wantedType = genericType.MakeGenericType(requiredT); 

Cela vous donnera l'objet Type GenericClass<T>, où T correspond à votre requiredT.

Vous pouvez alors construire une instance en utilisant Activator, comme ceci:

var instance = Activator.CreateInstance(wantedType, new Object[] { ...params }); 
5
Type requiredT = myobject.GetType(); 
Type genericType = typeof(GenericClass<>); 
Type wantedType = genericType.MakeGenericType(requiredT); 
5
Type wantedType = typeof(GenericClass<>).MakeGenericType(requiredT); 
Questions connexes