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

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

  • 请求Reflection API重写System.String.Empty有什么含义?
  • 如何使用reflection访问内部类
  • 为什么一些C#lambdaexpression式编译为静态方法?
  • 我可以发现一个Java类声明的内部类使用reflection吗?
  • 使用新的ScalareflectionAPI获取伴随对象实例
  • 使用reflection查找具有自定义属性的方法
  • Javareflection中的getFields和getDeclaredFields有什么不同?
  • 在.NETreflection中使用GetProperties()和BindingFlags.DeclaredOnly
  • Javareflection:类字段和方法的顺序是否标准化?
  • 如何检查一个variables是否是一个类?
  • 你怎么能得到方法参数的名字?