实例化具有泛型类型T的类,称为名称而不是类型

时间:2015-07-01 16:30:51

标签: c# generics types

我有以下代码

 private static void Main(string[] args)
    {
        ClassC<ClassD> objC=new ClassC<ClassD>();
        var tTypeName = "MyProject.ClassD";
        ClassC<Type.GetType(tTypeName)>=new ClassC<Type.GetType(tTypeName)>();
    }
}

public class ClassC<T>
{
    ///some code here
}

public class ClassD
{
    ///some code here
}

如果我知道类型T是像这样的ClassD

,我将实例化classc
 ClassC<ClassD> objC=new ClassC<ClassD>();

如果我在运行时知道它怎么办,怎样才能将ClassD类型名称传递给classc。我尝试了以下,它抛出编译错误,请建议。

var tTypeName = "MyProject.ClassD";
ClassC<Type.GetType(tTypeName)>=new ClassC<Type.GetType(tTypeName)>

1 个答案:

答案 0 :(得分:0)

你可以用反射做到这一点。有点像...

var myType = typeof(ClassC<>).MakeGenericType(new Type[] {typeof(ClassD)});
var constructor = myType.GetConstructor(new Type[0]);
object instance = constructor.Invoke(new object[0]);