2009-06-05 33 views
28

我需要根据存储在数据库中的类型创建通用对象。我该如何实现这个目标?下面的代码(不会编译)解释我的意思:基于Type变量创建通用对象

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

myObject的的功能,这是否您正在创建的对象必须有一个构造函数没有参数怎么办? – Charlie 2009-06-05 15:03:26

6

如果我需要调用像

Type type = typeof(MyObject<>).MakeGenericType(objectType); 
object myObject = Activator.CreateInstance(type); 
myobject.SetValue("1212");