列表与LT;>动态创建的结构

时间:2009-12-17 21:32:30

标签: c# generics reflection

在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;想要一个静态定义的类型名称。有什么方法可以解决这个问题吗?

2 个答案:

答案 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;