2010-03-26 5 views
5

J'ai besoin d'utiliser la méthode comme:Comment obtenir classe de type

DoSomething<(T)>(); 

Mais je ne sais pas quel type j'ai, seul objet de type de classe. Comment puis-je appeler cette méthode si j'ai seulement:

Type typeOfGeneric; 
+1

Votre question n'est pas très claire. Pourriez-vous donner un exemple plus concret? –

+0

Nous aurons besoin de plus de détails que cela ... peut-être un exemple de code ou deux aiderait. –

+0

@Jon Skeet, vraiment, vous ne pouvez pas à la fois modifier le poste d'un homme en essayant de clarifier comment vous l'imaginez, ET se plaignent que le poste n'est pas clair ... :-) –

Répondre

1

Si vous n'avez qu'un type spécifié en tant que type, vous devez générer la méthode générique et l'appeler via la réflexion.

Type thisType = this.GetType(); // Get your current class type 
MethodInfo doSomethingInfo = thisType.GetMethod("DoSomething"); 

MethodInfo concreteDoSomething = doSomethingInfo.MakeGenericMethod(typeOfGeneric); 
concreteDoSomething.Invoke(this, null); 
3

Vous utilisez la réflexion (en supposant DoSomething() est statique):

var methodInfo = typeOfGeneric.GetMethod("DoSomething"); 
methodInfo.Invoke(null, null); 

EDIT: Votre question change alors que je l'ai écrit la réponse. Le code ci-dessus est une méthode non-générique, ici il est une classe générique:

var constructedType = someType.MakeGenericMethod(typeOfGeneric); 
var methodInfo = constructedType.GetMethod("DoSomething"); 
methodInfo.Invoke(null, null); 

Et voilà une méthode générique statique sur une classe non générique:

var typeOfClass = typeof(ClassWithGenericStaticMethod); 

MethodInfo methodInfo = typeOfClass.GetMethod("DoSomething", 
    System.Reflection.BindingFlags.Static | BindingFlags.Public); 

MethodInfo genericMethodInfo = 
    methodInfo.MakeGenericMethod(new Type[] { typeOfGeneric }); 

genericMethodInfo.Invoke(null, new object[] { "hello" }); 
+0

pense que tu n'as pas eu ma question. Comment passer l'objet Type comme paramètre générique? – wassertim

Questions connexes