1 回答
TA贡献1831条经验 获得超9个赞
基本上,如果您有一个类型 object Type theType,则需要执行以下操作:
var listType = typeof(List<>);
var typeParams = new [] {theType};
var listOfTType = listType.MakeGenericType(typeParams);
var newListOfT = Activator.CreateInstance(listOfTType);
此时,您有一个 type 变量object,但它引用了一个 type 对象List<WhateverYourTypeIs>。说,theTypeis typeof(int),那么你将有一个 的对象List<int>。不过,将它转换为可用的东西是另一个问题。如果你想在这个列表中添加一些东西,我怀疑最好的方法是MethodInfo为Add方法和Invoke它获取一个。
如果类型具有默认构造函数并且创建起来不太昂贵,我想到了另一种方法来做到这一点。这是一个示例(创建一个List<int>- 但这只是我编码的方式):
var type = typeof(int);
var dummy = Activator.CreateInstance(type);
var listOfType = new[] {dummy}.ToList();
完成后,listOfType变量的类型为 aList<object>但指的是 a List<int>。它主要是可行的 - 例如,您可以调用Add(object someObj)它。你不会得到编译类型参数类型检查,但你可以使用它。
- 1 回答
- 0 关注
- 162 浏览
添加回答
举报