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

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

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

typest在运行时才是已知的。

3 Solutions collect form web for “C#实例化反映types的generics列表”

尝试这个:

 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进行此类操作。

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

  • 我如何获得我的自定义属性被应用的成员?
  • 从C#中的基类,获得派生types?
  • 从方法中检索调用方法名称
  • 我可以通过它的types获取C#委托的签名吗?
  • 使用接受string参数的构造函数实例化一个类对象?
  • 如何判断一个Javascript函数是否被定义
  • 使用Razor / MVC3将AssemblyVersion变成网页的问题
  • 在所有组件中查找types
  • C#reflection:如何从string获取类的引用?
  • 什么是invokedynamic,如何使用它?
  • 我可以从当前正在执行的函数中程序地获取参数名称/值吗?