2010-06-16 67 views
12

在执行以下代码时,我得到此错误“无法对ContainsGenericParameters为true的类型或方法执行后期操作。使用反射调用包含通用参数的静态方法

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"); 
    } 
} 

上面的代码只是我正面临的实际问题的缩放版本。请帮忙。

回答

22

你打电话给MethodInfo.MakeGenericMethod,但扔掉返回值。该返回值本身是方法要Invoke

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

谢谢你的工作。我错过了来自MakeGenericMethod的返回值,而是取出了前一个不包含泛型类型信息的值。 – AbrahamJP 2010-06-16 10:29:54

3

与您发布的代码,唯一的问题是:

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

应该

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

你”不要抓住对“烘焙”通用的引用。