创建列表<>;来自运行时类型

本文关键字:运行时 类型 gt 列表 lt 创建 | 更新日期: 2023-09-27 18:21:04

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

    DataBase = new ArrayList();
    foreach (Type T in Types)
    {
        DataBase.Add(new List<T>);
    }

不幸的是,Visual Studio表示"找不到类型或命名空间T"。有没有什么方法可以实现这一点,或者将List强制转换为T类型?谢谢Peter

创建列表<>;来自运行时类型

您可以使用反射:

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

您混淆了泛型类型参数的类型和System.Type类,下面是按照您想要的方式实现它的代码:

var lt = typeof(List<>);
foreach (Type T in Types)
{
    var l = Activator.CreateInstance(lt.MakeGenericType(T));
    DataBase.Add(l);
}

您可以。。。使用List<object>(如果您知道您的类型是引用类型,或者装箱是可以接受的);或者通过反射创建列表。

相关文章: