2009-06-05 2 views
28

Мне нужно создать общий объект на основе типа, который хранится в базе данных. Как я могу добиться этого? Приведенный ниже код (который не компилируется) объясняет, что я имею в виду:Создание универсального объекта на основе переменной типа

string typeString = GetTypeFromDatabase(key); 
Type objectType = Type.GetType(typeString); 

//This won't work, but you get the idea! 
MyObject<objectType> myobject = new MyObject<objectType>(); 

Можно ли делать такого рода вещи?

Благодаря

ответ

53
Type type = typeof(MyObject<>).MakeGenericType(objectType); 
object myObject = Activator.CreateInstance(type); 

Также - следить; Type.GetType(string) проверяет только исполняющую сборку и несколько системных сборок; он не сканирует все. Если вы используете имя с квалификацией, вы должны быть в порядке - в противном случае вам может потребоваться сначала получить Assembly и использовать someAssembly.GetType(string).

+0

ли объект, который вы создаете должны иметь конструктор, который не принимает никаких аргументов? – Charlie

+2

@Charlie Вы, вероятно, справились с этим в промежуточный год, но для полноты нет, вы можете использовать другие конструкторы с помощью [Activator.CreateInstance] (http://msdn.microsoft.com/en-us/library/wcxyzt4d .aspx) '(Тип, params Object [])'. –

6

Что делать, если мне нужно вызвать функцию MyObject как

Type type = typeof(MyObject<>).MakeGenericType(objectType); 
object myObject = Activator.CreateInstance(type); 
myobject.SetValue("1212"); 
Смежные вопросы