如何在C#中输入cast,需要将类型转换为System.type
我需要使用反射初始化如何在C#中输入cast,需要将类型转换为System.type,c#,reflection,casting,C#,Reflection,Casting,我需要使用反射初始化System.Collections.Generic.List的实例。例如,类型名是从XML加载的,在程序启动之前是未知的。我得到了类型及其组件: Type T = Type.GetType("System.Collections.Generic.List`1[System.String]"); Assembly ass = T.Assembly; 在此之后,我需要初始化变量,但我不想显式写入类型,因此使用: var lst = ass.CreateInstance(T.F
System.Collections.Generic.List
的实例。例如,类型名是从XML加载的,在程序启动之前是未知的。我得到了类型及其组件:
Type T = Type.GetType("System.Collections.Generic.List`1[System.String]");
Assembly ass = T.Assembly;
在此之后,我需要初始化变量,但我不想显式写入类型,因此使用:
var lst = ass.CreateInstance(T.FullName) as List<String>;
应该没问题。但我不能。
我必须做什么?不可能声明“变量”类型的变量。任何变量/属性/方法/参数/类/任何东西都必须在编译时预先知道,因为C#是一种强类型语言 处理动态生成的数据类型(如示例中所示)的唯一真正方法是使用类型unsafe
object
或dynamic
,它可以包含任何内容,甚至在编译时未知。
还要记住,
var
语法实际上并不是任何变量,它只是避免编写实际类型的语法糖,而实际类型是从=
右侧的类型中获得的,因此它对您的目的毫无帮助。您想用lst做什么?答案取决于这一点。你根本不能这么做T
仅在运行时已知,但是as
右侧的类型需要在编译时已知。如果它被显式初始化为List lst=new List(),我希望使用这种方式代码>因为您不想指定类型,所以lst变量的类型必须是object或dynamic。我猜该类型仅在运行时已知。如果是这种情况,那么使用dynamic lst=Activator.CreateInstance(T)代码>谢谢,这个解决方案适合我。
var lst = ass.CreateInstance(T.FullName) as T;