Вызов статических методов, содержащих общие параметры с использованием 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");
}
}
Вышеприведенный код - это просто масштабированная версия фактической проблемы, с которой я столкнулся. Пожалуйста помоги.
Ответы
Ответ 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)});
Вы не захватываете ссылку на "испеченный" общий.