如何找出列表项的类型,然后创建该类型项的列表

本文关键字:类型 列表 创建 然后 何找出 | 更新日期: 2023-09-27 18:20:34

我正在尝试使用一个通用的List<T>自定义类MyList<T>来进行自动项目解析,但我一直在创建一个返回类型MyList<T>。具体来说,我不知道如何创建具有给定类型的列表。我可以做的一件事是找出类型并将其存储在Type itemType变量中。

这个问题帮助我找出了列表项目的类型。

问题是,直到运行时我才知道列表类型,所以它不能显式地写在代码中。

如何使用Type itemType变量创建特定类型的项目列表?

如何找出列表项的类型,然后创建该类型项的列表

您可以使用反射来完成此操作,例如:

var listType = typeof(List<>);
listType.MakeGenericType(typeof(MyType))
return Activator.CreateInstance(listType);

另一个例子是,如果你只有一个"MyType"的实例,但直到运行时才知道它是什么:

public IEnumerable GetGenericListFor(object myObject){
    var listType = typeof(List<>);
    listType.MakeGenericType(myObject.GetType())
    return Activator.CreateInstance(listType);
}

下面是相应的MSDN文章,介绍在给定泛型类型和参数类型的情况下动态创建泛型类型。滚动到中间的"构造泛型类型的实例"部分。

快速取样:

Type d1 = typeof(Dictionary<,>);
Type[] typeArgs = {typeof(string), typeof(int)};
Type constructed = d1.MakeGenericType(typeArgs);
object o = Activator.CreateInstance(constructed);