“GetElementType”的令人困惑的结果在数组和通用列表上

发布于 2024-10-16 06:02:24 字数 272 浏览 2 评论 0原文

通用列表:

var elementType1 = typeof (List<A>).GetElementType();

数组:

var elementType = typeof (A[]).GetElementType();

为什么我只能获取数组的元素类型? 如何获取通用列表的元素类型? (注:通用列表已加框)

Generic list:

var elementType1 = typeof (List<A>).GetElementType();

Array:

var elementType = typeof (A[]).GetElementType();

Why do I only get the element type of an array?
How could I get the element type of a generic list? (remark: the generic list is boxed)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

音栖息无 2024-10-23 06:02:24

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

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

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

使用GetGenericArguments 方法来获取构造类型的类型参数:

var elementType1 = typeof(List<A>).GetGenericArguments().Single();

GetElementType only gets the element-type for array, pointer and reference types.

When overridden in a derived class,
returns the Type of the object
encompassed or referred to by the
current array, pointer or reference
type

The reflection API doesn't "know" that List<T> is a generic container and that the type-argument of one of its constructed types is representative of the type of the elements it contains.

Use the GetGenericArguments method instead to get the type-arguments of the constructed type:

var elementType1 = typeof(List<A>).GetGenericArguments().Single();
月寒剑心 2024-10-23 06:02:24
var elementType1 = typeof(List<A>).GetGenericArguments()[0]; 
var elementType = typeof(int[]).GetElementType();
var elementType1 = typeof(List<A>).GetGenericArguments()[0]; 
var elementType = typeof(int[]).GetElementType();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文