2010-05-14 63 views
17

我需要创建一个泛型类型,但我不知道编译时的类型。我想这样做:从System.Type初始化通用对象

Type t = typeof(whatever); 
var list = new List<t> 

这不会编译,因为t不是有效的类型。但它确实知道所有关于有效类型的信息。有没有办法像这样从System.Type动态创建通用列表?我可能需要反思,没关系,我只是在这里输了一些。

回答

24

像这样:

Type t; 
Type genericListType = typeof(List<>).MakeGenericType(t); 
object list = Activator.CreateInstance(genericListType); 

请注意,您只能将其分配给object类型的变量。 (虽然您可以投射到非通用的IList界面)

要使用list变量,您可能需要反思。

+1

+1不知道'List <>'是合法的。很酷。 – 2010-05-14 03:16:14

+1

@Igot:只在'typeof'中。 – SLaks 2010-05-14 03:24:58

+0

这个效果很好,除了以后使用它很痛苦。尽管完成了工作。 – captncraig 2010-05-14 14:49:26