Краткий ответ F<???>
невозможен. Все это происходит во время компиляции. Ближайшая ситуация - использовать «dynamici c», но у вас та же проблема. У вас нет доступа к «элементам типа» напрямую, только по отражению.
var type = Type.GetType("System.Int32");
var obj = Activator.CreateInstance(typeof(F<>).MakeGenericType(type));
Как видите, вы должны хранить типы как полное имя с пространствами имен, но это так.
Другой способ - использовать Dictionary<string, F<T>>
, но это заставляет вас обновлять карту каждый раз, когда вы добавляете новый тип для управления. (Если вы используете Dictionary<string, Type>
, у вас та же проблема, что и с первым вариантом).
Вы должны учитывать, что если вы хотите вызывать методы, свойства и все, что вам нужно будет сделать с отражением
Редактировать: OTP-решение заключается в динамическом написании кода, его компиляции и загрузке во время выполнения (НЕ ДЕЛАЙТЕ ЭТОГО)
Это подводит меня к вопросу, что вы пытаетесь сделать? Это звучит как переосмысление простой проблемы.