C# 混淆“的结果”;GetElementType";关于数组和泛型列表

C# 混淆“的结果”;GetElementType";关于数组和泛型列表,c#,arrays,generics,reflection,generic-list,C#,Arrays,Generics,Reflection,Generic List,通用列表: var elementType1 = typeof (List<A>).GetElementType(); var elementType = typeof (A[]).GetElementType(); 为什么我只获取数组的元素类型? 如何获取泛型列表的元素类型?(备注:通用列表已装箱)仅获取数组、指针和引用类型的元素类型 在派生类中重写时, 返回对象的类型 包含或提及的 当前数组、指针或引用 类型 反射API“不知道”List是一个泛型容器,并且它的一个构造类型的

通用列表:

var elementType1 = typeof (List<A>).GetElementType();
var elementType = typeof (A[]).GetElementType();
为什么我只获取数组的元素类型? 如何获取泛型列表的元素类型?(备注:通用列表已装箱)

仅获取数组、指针和引用类型的元素类型

在派生类中重写时, 返回对象的类型 包含或提及的 当前数组、指针或引用 类型

反射API“不知道”
List
是一个泛型容器,并且它的一个构造类型的type参数代表它所包含的元素的类型

改为使用该方法获取构造类型的类型参数:

var elementType1 = typeof(List<A>).GetGenericArguments().Single();
var elementType1=typeof(List).GetGenericArguments().Single();
var elementType1=typeof(List).GetGenericArguments()[0];
var elementType=typeof(int[])。GetElementType();

您能否澄清您的评论“通用列表已装箱”是什么意思?装箱表示您仅将此列表作为对象。这不是装箱。装箱仅适用于值类型。@Ani这称为什么?
List
是引用类型;此类类型的值(通常为表达式)是对对象的引用。我猜您只是有一个不太特定类型的变量(例如,
对象
),它引用了一个
列表
实例。这只是关于分配兼容性,而不是装箱。这是一个表示保持转换;没有装箱。是否有一个好的方法来确定我是否有一个通用列表或数组?我可以证明为null,然后使用您的解决方案,但可能有更好的方法。Array=
type.IsArray
。ListT=
type.GetGenericTypeDefinition()==typeof(List)
(您还需要验证该类型是否为构造的泛型类型)。
var elementType1 = typeof(List<A>).GetGenericArguments()[0]; 
var elementType = typeof(int[]).GetElementType();