【发布时间】:2010-05-14 11:25:12
【问题描述】:
我需要创建一个泛型类型,但我在编译时不知道该类型。我想这样做:
Type t = typeof(whatever);
var list = new List<t>
这不会编译,因为 t 不是有效类型。但它确实知道所有关于有效类型的信息。有没有办法像这样从 System.Type 动态创建通用列表?我可能需要反思,没关系,我只是有点迷路了。
【问题讨论】:
我需要创建一个泛型类型,但我在编译时不知道该类型。我想这样做:
Type t = typeof(whatever);
var list = new List<t>
这不会编译,因为 t 不是有效类型。但它确实知道所有关于有效类型的信息。有没有办法像这样从 System.Type 动态创建通用列表?我可能需要反思,没关系,我只是有点迷路了。
【问题讨论】:
像这样:
Type t;
Type genericListType = typeof(List<>).MakeGenericType(t);
object list = Activator.CreateInstance(genericListType);
请注意,您只能将其分配给object 类型的变量。 (虽然您可以转换为非泛型 IList 接口)
要使用list 变量,您可能需要反射。
【讨论】: