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

时间:2012-01-20 00:31:11

标签: c#

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

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

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

3 个答案:

答案 0 :(得分:20)

您可以使用反射:

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

答案 1 :(得分:0)

您混淆了类型和Generic Type Parameters的System.Type类,以下是按您希望的方式实现它的代码:

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

答案 2 :(得分:0)

你可以......使用List<object>(如果你知道你的类型是引用类型,或者拳击是可以接受的);或create a List via reflection