2010-03-26 14 views
5

Tengo que utilizar un método similar:Como llegar clase de tipo

DoSomething<(T)>(); 

pero no sabe qué tipo tengo, único objeto de tipo de clase. ¿Cómo puedo llamar a este método si sólo tengo:

Type typeOfGeneric; 
+1

Tu pregunta no es muy clara. ¿Podría dar un ejemplo más concreto? –

+0

Vamos a necesitar más detalles que eso ... tal vez un ejemplo de código o dos podría ayudar. –

+0

@Jon Skeet, realmente, no se puede editar la publicación de un hombre tratando de aclarar cómo se lo imagina, Y quejarse de que la publicación no está clara ... :-) –

Respuesta

1

Si solo tiene un tipo especificado como tipo, debe crear el método genérico y llamarlo mediante reflejo.

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

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

Usted utilizar la reflexión (suponiendo DoSomething() es estática):

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

EDIT: Su pregunta cambios mientras escribía la respuesta. El código anterior es para un método no genérica, aquí está para una clase genérica:

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

Y aquí es para un método genérico estática en una clase no genérica:

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

I creo que no recibiste mi pregunta ¿Cómo pasar el tipo de objeto como parámetro genérico? – wassertim