在C#中,我想基于动态值类型创建一个列表,例如:
void Function1() {
TypeBuilder tb = .... // tb is a value type
...
Type myType = tb.CreateType();
List<myType> myTable = new List<myType>();
}
void Function2(Type myType)
{
List<myType> myTable = new List<myType>();
}
这不会完整,因为List&lt;&gt;想要一个静态定义的类型名称。有什么方法可以解决这个问题吗?
答案 0 :(得分:4)
您可以通过反射在运行时创建强类型列表,尽管您只能通过非通用IList接口访问它
IList myTable = (IList)Activator.CreateInstance(typeof(List<>).MakeGenericType(new[] { myType }));
答案 1 :(得分:2)
您将不得不使用反射来创建列表:
Type listType = typeof(List<>);
Type concreteType = listType.MakeGenericType(myType);
IList list = Activator.CreateInstance(concreteType) as IList;