Создание универсального объекта на основе переменной типа
Мне нужно создать общий объект на основе типа, который хранится в базе данных. Как я могу добиться этого? Код ниже (который не будет компилироваться) объясняет, что я имею в виду:
string typeString = GetTypeFromDatabase(key);
Type objectType = Type.GetType(typeString);
//This won't work, but you get the idea!
MyObject<objectType> myobject = new MyObject<objectType>();
Можно ли делать такие вещи?
Спасибо
Ответы
Ответ 1
Type type = typeof(MyObject<>).MakeGenericType(objectType);
object myObject = Activator.CreateInstance(type);
Также - смотрите; Type.GetType(string)
проверяет только исполняющую сборку и несколько системных сборок; он не сканирует все. Если вы используете имя с именем сборки, вы должны быть в порядке - иначе вам может понадобиться сначала получить Assembly
и использовать someAssembly.GetType(string)
.
Ответ 2
Что делать, если мне нужно вызвать функцию myObject, например
Type type = typeof(MyObject<>).MakeGenericType(objectType);
object myObject = Activator.CreateInstance(type);
myobject.SetValue("1212");