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;
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;
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);
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" });
I creo que no recibiste mi pregunta ¿Cómo pasar el tipo de objeto como parámetro genérico? – wassertim
Tu pregunta no es muy clara. ¿Podría dar un ejemplo más concreto? –
Vamos a necesitar más detalles que eso ... tal vez un ejemplo de código o dos podría ayudar. –
@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 ... :-) –