2010-06-16 23 views
12

Al ejecutar el siguiente código, aparece este error "Las operaciones limitadas tardías no pueden realizarse en los tipos o métodos para los que ContainsGenericParameters es verdadero."Invocación de métodos estáticos que contienen parámetros genéricos utilizando la Reflection

class Program 
{ 
    static void Main(string[] args) 
    { 
     MethodInfo MI = typeof(MyClass).GetMethod("TestProc"); 
     MI.MakeGenericMethod(new [] {typeof(string)}); 
     MI.Invoke(null, new [] {"Hello"}); 
    } 
} 

class MyClass 
{ 
    public static void TestProc<T>(T prefix) 
    { 
     Console.WriteLine("Hello"); 
    } 
} 

El código anterior es solo una versión a escala del problema real que estoy enfrentando. Por favor ayuda.

Respuesta

22

Está llamando al MethodInfo.MakeGenericMethod pero tirando el valor de retorno. El valor retorno sí mismo es el método que desea Invoke:

MethodInfo genericMethod = MI.MakeGenericMethod(new[] { typeof(string) }); 
genericMethod.Invoke(null, new[] { "Hello" }); 
+0

Gracias que funcionó. Me perdí el valor de retorno de MakeGenericMethod, en su lugar tomé el anterior que no contenía la información de tipo genérico. – AbrahamJP

3

El único problema con el código que publique es:

MI.MakeGenericMethod(new [] {typeof(string)}); 

Debe ser

MI = MI.MakeGenericMethod(new [] {typeof(string)}); 

Usted' No estoy tomando una referencia al genérico 'horneado'.

Cuestiones relacionadas