1

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

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

问题是我直到运行时才知道列表类型,因此无法在代码中显式编写。

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

4

2 回答 2

2

您可以使用反射来做到这一点,例如:

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);
}
于 2013-06-30T22:04:32.017 回答
0

是有关在给定泛型类型和参数类型的情况下动态创建泛型类型的相应 MSDN 文章。滚动到中间的“构造通用类型的实例”部分。

快速示例:

Type d1 = typeof(Dictionary<,>);
Type[] typeArgs = {typeof(string), typeof(int)};
Type constructed = d1.MakeGenericType(typeArgs);
object o = Activator.CreateInstance(constructed);
于 2013-06-30T22:04:45.420 回答