C#:在给定对Type的引用的情况下实例化List

时间:2009-07-20 17:38:44

标签: c# list

假设在C#中,myType是对某些Type的引用。 仅使用myType,是否可以创建List myType个对象?

例如,在下面的代码中,虽然它是错误的,但我想通过实例化

new List <myType> ( )

<

5 个答案:

答案 0 :(得分:8)

您可以使用反射:

Type typeList = typeof(List<>);
Type actualType = typeList.MakeGenericType(myType);
object obj = Activator.CreateInstance(actualType);

答案 1 :(得分:2)

答案 2 :(得分:2)

您可以使用反射,但由于返回列表的类型在编译时是未知的,因此使用返回列表的代码必须通过松散类型<来访问成员< / em> interface。

这不会导致代码比使用List更快或可维护。

更好的解决方案是创建List&lt; 界面&gt;其中&lt; 接口&gt;是运行时可以放在列表中的所有类型的最强通用接口或基类。至少这样,在使用列表成员时,您不必从对象来回转换,并且您将对列表中的各种事物进行编译时验证。

答案 3 :(得分:1)

是否有理由使用

List<myType>' instead of List`

基本上你是代码想要在集合(列表)中存储类型在编译时未知的对象。

我想说,如果你打算制作这个生产代码,可以使用List或使用继承并存储基类列表。

答案 4 :(得分:0)

这是不可能的,因为在编译时不知道myType并且您无法在代码中操作此列表。您可以使用反射来创建数组。