17
我需要创建一个泛型类型,但我不知道编译时的类型。我想这样做:从System.Type初始化通用对象
Type t = typeof(whatever);
var list = new List<t>
这不会编译,因为t不是有效的类型。但它确实知道所有关于有效类型的信息。有没有办法像这样从System.Type动态创建通用列表?我可能需要反思,没关系,我只是在这里输了一些。
我需要创建一个泛型类型,但我不知道编译时的类型。我想这样做:从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
变量,您可能需要反思。
+1不知道'List <>'是合法的。很酷。 – 2010-05-14 03:16:14
@Igot:只在'typeof'中。 – SLaks 2010-05-14 03:24:58
这个效果很好,除了以后使用它很痛苦。尽管完成了工作。 – captncraig 2010-05-14 14:49:26