从运行时类型创建列表<>

3Pi*_*3Pi 13 c#

我正在寻找创建一个List,其中T的类型是几个不相关的类(具有相同的构造函数参数),我通过反射知道.

    DataBase = new ArrayList();
    foreach (Type T in Types)
    {
        DataBase.Add(new List<T>);
    }
Run Code Online (Sandbox Code Playgroud)

不幸的是,Visual Studio说"无法找到类型或命名空间T".有什么方法可以实现这个,或者将List转换为T类型?谢谢,彼得

Bro*_*ass 21

你可以使用反射:

List<object> database = new List<object>();
foreach (Type t in Types)
{
   var listType = typeof(List<>).MakeGenericType(t);
   database.Add(Activator.CreateInstance(listType));
}
Run Code Online (Sandbox Code Playgroud)

  • 这样可行.但是创建List对象只是问题的一小部分.他还必须添加元素.更糟糕的是,更糟糕的是,阅读它们.该代码也不知道元素类型.在此处指示ORM,给出"数据库"一词. (3认同)
  • 这适用于创建对象,但它返回一个对象。我已经做到了,但是我无法将该对象转换为 List&lt;T&gt;。如果我知道 T,我当然可以使用“as List&lt;T&gt;”,但是由于直到运行时才定义它,我不确定如何使其工作。 (3认同)