2015-07-01 150 views
0

我有以下代码实例化泛型类型T的一类被称为名字不是类型

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 
} 

我将实例classc如果我知道的T型是D类这样

ClassC<ClassD> objC=new ClassC<ClassD>(); 

什么如果我在运行时知道它,我如何将ClassD类型名称传递给classc。我试了下面,它抛出编译错误,请指教。

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

在运行时解析类型时,您必须使用Activator和Reflection。 – Dai

+0

谢谢@hatchet我正在寻找答案,直到现在还没有进入这个线程。这有助于我解决我的问题。 – Esen

回答

0

你可以用反射来做到这一点。类似...

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