基本上我需要的是使用Type.GetType在泛型類型中使用的類型,
是否有可能,如果是,怎麼辦? 我需要的是這樣的:ClassName <Type.GetType(「Somenamespace.ClassName」)>
Type t = Type.GetType("mynamespce.a.b.c");
var x = GenericClass<t>();
基本上我需要的是使用Type.GetType在泛型類型中使用的類型,
是否有可能,如果是,怎麼辦? 我需要的是這樣的:ClassName <Type.GetType(「Somenamespace.ClassName」)>
Type t = Type.GetType("mynamespce.a.b.c");
var x = GenericClass<t>();
您可以使用Type.MakeGenericType和Activator.CreateInstance使泛型類型,例如實例
Type t = Type.GetType("mynamespce.a.b.c");
Type g = typeof(GenericClass<>).MakeGenericType(t);
object x = Activator.CreateInstance(g);
但它不會被強類型的泛型類的在你的代碼的類型,如果這就是你要找的內容。這是不可能的,因爲C#不允許您使用開放的泛型類型。
這是可以做到: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);
Type t = Type.GetType("mynamespce.a.b.c");
Type gt = typeof(GenericClass<>).MakeGenericType(t);
var x = Activator.CreateInstance(gt);
是的,但是您將不得不進一步思考。並且您將得到的對象作爲System.Object。
object obj = Activator.CreateInstance(typeof(GenericClass<>).MakeGenericType(Type.GetType("mynamespce.a.b.c")));
太糟糕我想用它作爲IoC.Resolve(g) – Omu 2009-12-01 09:09:32
:)它實際上工作,我確實設法做Ioc.Resolve(g),也通過反射得到了方法,並調用它:) – Omu 2009-12-01 09:55:40
你調用你的方法是這樣的:GenericClass(); 在您投入類型爲t的方法中: t x = Activator.CreateInstance(g)as t; (代碼未經測試) –
2009-12-01 10:20:38