类名<type.gettype( “somenamespace.classname”)> </type.gettype( “somenamespace.classname”)>

时间:2009-12-01 08:57:32

标签: c# generics reflection

基本上我需要的是使用我在通用类型中使用Type.GetType的Type,
有可能吗,如果是的话怎么样? 我需要这样的东西:

Type t = Type.GetType("mynamespce.a.b.c");
var x = GenericClass<t>();

Duplicate

4 个答案:

答案 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")));