基本上我需要的是使用我在通用类型中使用Type.GetType的Type,
有可能吗,如果是的话怎么样?
我需要这样的东西:
Type t = Type.GetType("mynamespce.a.b.c");
var x = GenericClass<t>();
答案 0 :(得分: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 :(得分: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#不允许您使用开放的泛型类型。
答案 2 :(得分:1)
Type t = Type.GetType("mynamespce.a.b.c");
Type gt = typeof(GenericClass<>).MakeGenericType(t);
var x = Activator.CreateInstance(gt);
答案 3 :(得分:1)
是的,确实如此,但您必须使用进一步的反思。然后将结果对象作为System.Object获取。
object obj = Activator.CreateInstance(typeof(GenericClass<>).MakeGenericType(Type.GetType("mynamespce.a.b.c")));