【发布时间】:2014-03-10 07:26:45
【问题描述】:
我有一些这样的代码,直到运行时我才知道是什么类型。
Type type;
我需要一个列表定义为:
List<type>
我试过了
var listType = typeof(List<>).MakeGenericType(new []{type});
IList list = Activator.CreateInstance(listType));
但它不能很好地工作,因为我需要将此列表传递给 XmlSerializer.Serialize 方法。 只有当这个列表完全定义为List时才会输出正确的结果
例如: 当我通过时
List<String> list = new List<String>()
输出
<ArrayOfString>...</ArrayOfString>
当我通过时
IList list = new List<String>()
会输出
<ArrayOfAnyType>...</ArrayOfAnyType>
这不是我想要的。
当我不知道编译时是什么类型时,如何定义一个列表?
【问题讨论】:
-
不确定我是否真正理解了这个问题。但是如果你想要一个列表,你可以调用一个 ToList() 来将你的集合转换为一个列表吗?假设 activator.createInstance 返回一些 IEnumerable... var list = Activator.CreateInstance(listType).ToList();
-
您的标题和标签确实不适合您的问题。您似乎能够正确输入运行时
List<>。您确实遇到了运行时类型和XMLSerializer的问题。使用更好的标题和更好的标签,您可能会得到更好的答案。 -
你传递给
XmlSerializer的构造函数的类型是什么? -
我实际上并没有意识到问题在于人们如何初始化 XmlSerializer,因为它是在很久以前创建的一个类中。谢谢大家!!
标签: c# reflection