如何在C#中键入需要类型为System.Type的类型转换

时间:2013-10-12 13:41:44

标签: c# reflection casting

我需要使用Reflection初始化System.Collections.Generic.List<String>的实例。例如,类型名称已从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>;

是不合适的。我已经在T中获得了所需的类型,所以如果我可以做类似的事情:

var lst = ass.CreateInstance(T.FullName) as T;

应该没问题。但我不能。 我该怎么办?

1 个答案:

答案 0 :(得分:2)

无法声明'变量'类型的变量。在编译时,任何变量/ property / method / parameter / class /之前必须事先知道,因为C#是一种强类型语言。

处理动态生成的数据类型的唯一真正方法是使用类型不安全objectdynamic,它可以包含任何内容,甚至在编译时也是未知的。 还记得var语法不是真正的变量,它只是用于避免编写实数类型的语法糖,它是从=右侧的类型获得的,所以它真的是没有帮助你的目的。