1

我需要初始化一个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;

应该没问题。但我不能。我需要做什么?

4

1 回答 1

2

不能声明“变量”类型的变量。任何变量/属性/方法/参数/类/任何东西都必须在编译时事先知道,因为 C# 是一种强类型语言。

像在您的示例中那样处理动态生成的数据类型的唯一真正方法是保留类型不安全的objector dynamic,它可以包含任何内容,甚至在编译时未知。还要记住,var语法实际上并不是任何变量,它只是用于避免编写真实类型的语法糖,它是从右侧的类型中获得的=,所以它对你的目的没有帮助。

于 2013-10-12T13:59:48.813 回答