Делегат с универсальным типом, известным только во время выполнения

Thomas Flinkow спросил: 14 ноября 2017 в 05:34 в: c#

В моем коде я объявил интерфейс следующим образом:

interface IGeneric
{
    T GetOfType<T>();
}

И я хочу вызвать метод интерфейса с универсальным типом, известным только во время выполнения. Вот как я это делаю в настоящее время, и это работает:

Type genericArgument = ...
object interfaceImplementation = ...MethodInfo methodInfo = typeof(IGeneric).GetMethod("GetOfType").MakeGenericMethod(genericArgument);
methodInfo.Invoke(interfaceImplementation, null);

, но так как я должен вызывать эту часть кода довольно часто, я хотел бы кэшировать информацию о методе в делегате , Я попробовал это определение делегата

private delegate T GetOfTypeDelegate<T>();

и попытался создать делегата, используя информацию о методе, которую я получил, как показано выше, как показано ниже:

GetOfTypeDelegate<?> deleg = (GetOfTypeDelegate<?>) Delegate.CreateDelegate(typeof(GetOfTypeDelegate<?>), methodInfo);

но так как я не знаю тип универсального аргумента во время компиляции, я не знаю, что поместить, где я использовал ? или как заставить это работать на всех.

Любая помощь с благодарностью.

0 ответов