2009-12-01 43 views

回答

2

您可以使用Type.MakeGenericType和Activator.CreateInstance使泛型類型,例如實例

Type t = Type.GetType("mynamespce.a.b.c"); 
Type g = typeof(GenericClass<>).MakeGenericType(t); 
object x = Activator.CreateInstance(g); 

但它不會被強類型的泛型類的在你的代碼的類型,如果這就是你要找的內容。這是不可能的,因爲C#不允許您使用開放的泛型類型。

+0

太糟糕我想用它作爲IoC.Resolve(g) – Omu 2009-12-01 09:09:32

+0

:)它實際上工作,我確實設法做Ioc.Resolve(g),也通過反射得到了方法,並調用它:) – Omu 2009-12-01 09:55:40

+0

你調用你的方法是這樣的:GenericClass (); 在您投入類型爲t的方法中: t x = Activator.CreateInstance(g)as t; (代碼未經測試) – 2009-12-01 10:20:38

3

這是可以做到:http://msdn.microsoft.com/en-us/library/b8ytshk6.aspx(見「構建泛型類型的實例」

下面的示例創建一個Dictionary<string,object>

Type d1 = typeof(Dictionary<,>); 
Type[] typeArgs = {typeof(string), typeof(object)}; 
Type constructed = d1.MakeGenericType(typeArgs); 
object o = Activator.CreateInstance(constructed); 
1
Type t = Type.GetType("mynamespce.a.b.c"); 
Type gt = typeof(GenericClass<>).MakeGenericType(t); 
var x = Activator.CreateInstance(gt); 
1

是的,但是您將不得不進一步思考。並且您將得到的對象作爲System.Object。

object obj = Activator.CreateInstance(typeof(GenericClass<>).MakeGenericType(Type.GetType("mynamespce.a.b.c"))); 
相關問題