2010-05-14 66 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