2009-06-05 56 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");