开发者

Invoking static methods containing Generic Parameters using Reflection [duplicate]

This question already has answers here: How do I use reflection to call a generic method? (8 answers) Closed 8 years ago.

While executing the following code i gets this error "Late bound operations cannot be performed on types or methods for which ContainsGenericParameters is 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");
    }
}

The above code is just a scaled version of the actual problem i 开发者_如何学Cam facing. Please help.


You are calling MethodInfo.MakeGenericMethod but throwing away the return value. The return value itself is the method you want to Invoke :

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


The only problem with the code that you post is:

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

Should be

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

You're not grabbing a reference to the 'baked' generic.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜