views:

73

answers:

2

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 am facing. Please help.

+7  A: 

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" });
AakashM
Thanks that worked. I missed out the return value from MakeGenericMethod, instead i took the previous one which didn't contain the generic type information.
AJP
+1  A: 

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.

Andras Zoltan