假设在C#中,myType
是对某些Type
的引用。
仅使用myType
,是否可以创建List
myType
个对象?
例如,在下面的代码中,虽然它是错误的,但我想通过实例化
new List
。<
myType>
( )
<
答案 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
并且您无法在代码中操作此列表。您可以使用反射来创建数组。