Динамически вызвать обобщенный метод

107
20 сентября 2019, 21:30

Есть функция:

static void getTable<T>(){}

Хочу вызвать так:

getTable<Type.GetType("MyClass")>();

Возможно ли?

Answer 1

Сколько я насмотрелся на мучения с подобными вызовами... Динамика и рефлексия только усложняют и замедляют код.

Сколько у вас типов, с которым может вызываться этот метод? Думаю, всего несколько штук. Вряд ли более десятка. Так напишите просто:

if (Type.GetType(typeName) == typeof(MyClass))
{
    getTable<MyClass>();
}
else if (Type.GetType(typeName) == typeof(OtherClass))
{
    getTable<OtherClass>();
}
else if ...

Просто, понятно, работает быстро.

Answer 2

Попробуй как-то так сделать:

GetType().GetMethod("getTable").MakeGenericMethod(typeof(MyClass))?.Invoke();

Но это на крайний случай если невозможно сделать через наследование.

Если же возможно сделать наследование, то передавай интерфейс или родительский класс.

    static void getTable<IBaseInterfase>(){}

и тогда ты можешь вызывать нужный метод внутри getTable который прописан в родителе. Ну и, конечно же, передавать любой дочерний класс внутрь Base

READ ALSO
Возникает исключение System.Net.WebException: An exception occurred during a WebClient request. Как это исправить?

Возникает исключение System.Net.WebException: An exception occurred during a WebClient request. Как это исправить?

Необходимо скачать файл с FTP после нажатия кнопки,но при этом возникает такое исключение

91
Правильно задать директорию для FirefoxProfile

Правильно задать директорию для FirefoxProfile

Пробовал так, но после запуска инстанса "C:\111\" продолжает быть пустойЯ хочу чтоб в этой папке сохранялись куки, кеш, расширения

104
Виснет передвижение объекта после Rigidbody

Виснет передвижение объекта после Rigidbody

При перемещении объекта с Rigidbody, начинает виснуть, тормозить, а когда сталкивается с другими объектами с Box colider то и вовсе не двигаетсяКак...

86
Как передать тескт на другую страницу сайта через url?

Как передать тескт на другую страницу сайта через url?

Подскажите, пожалуйста, как передать текст через ссылку urlКак передать текст,а потом отобразить на другой странице сайта

94