C#实例化反映types的generics列表

是否有可能从C#(.Net 2.0)中的reflectiontypes创build一个通用的对象?

void foobar(Type t){ IList<t> newList = new List<t>(); //this doesn't work //... } 

typest在运行时才是已知的。

尝试这个:

 void foobar(Type t) { var listType = typeof(List<>); var constructedListType = listType.MakeGenericType(t); var instance = Activator.CreateInstance(constructedListType); } 

现在该如何处理instance ? 由于您不知道列表内容的types,因此您可以做的最好的事情就是将instance作为IList进行投放,以便您可以拥有除object以外的其他内容:

 // Now you have a list - it isn't strongly typed but at least you // can work with it and use it to some degree. var instance = (IList)Activator.CreateInstance(constructedListType); 
 static void Main(string[] args) { IList list = foobar(typeof(string)); list.Add("foo"); list.Add("bar"); foreach (string s in list) Console.WriteLine(s); Console.ReadKey(); } private static IList foobar(Type t) { var listType = typeof(List<>); var constructedListType = listType.MakeGenericType(t); var instance = Activator.CreateInstance(constructedListType); return (IList)instance; } 

您可以使用MakeGenericType进行此类操作。

有关文档,请参阅这里和这里 。