Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#中输入cast,需要将类型转换为System.type_C#_Reflection_Casting - Fatal编程技术网

如何在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;