Подтвердить что ты не робот

Вызов статических методов, содержащих общие параметры с использованием Reflection

Выполняя следующий код, я получаю эту ошибку: "Операции с ограниченной границей не могут выполняться для типов или методов, для которых ContainsGenericParameters истинно".

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

Вышеприведенный код - это просто масштабированная версия фактической проблемы, с которой я столкнулся. Пожалуйста помоги.

4b9b3361

Ответ 1

Вы вызываете MethodInfo.MakeGenericMethod, но выбрасываете возвращаемое значение. возвращаемое значение - это метод, который вы хотите использовать Invoke:

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

Ответ 2

Единственная проблема с кодом, который вы публикуете:

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

Должно быть

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

Вы не захватываете ссылку на "испеченный" общий.