【发布时间】:2011-07-09 04:01:57
【问题描述】:
当我执行int[]、string[]、T[] 时 - 这是一个通用数组。数组只是一个对象,就像其他所有东西一样。
那么 [] 的实际开放泛型类型是什么?我认为这只是Array<> 之类的语法糖,但我找不到任何类似的东西。
如果你能在 Jon Skeet 之前以某种方式回答这个问题,则可以获得奖励积分。
【问题讨论】:
-
请记住,数组是在在泛型添加到框架之前设计的。如果我们从头开始再做一遍并且泛型在 v1 中,那么可以肯定,数组可能是 Array
,就像可空对象是 Nullable 。您说得对,数组非常“通用”;从某种意义上说,数组是 v1 CLR 中的唯一泛型类型,这就是为什么它们是如此特殊的类型。下次您从头开始设计自己的类型系统时,请记住尽早添加泛型,而不是稍后添加。 -
谢谢@Eric,我读到了你的Mark 链接的文章,非常有趣。我想我已经假设当 2.0 出现时,Array 的内部结构被重新设计了。鉴于这些限制,创建通用 IArray
版本不是一个好主意吗?为什么没有发生这种情况?毕竟,数组肯定不同于 IList 和 IEnumerable -
我不知道 CLR 团队在那次发布期间的确切想法,但我可以做出有根据的猜测。我的想法是“完美是善的敌人”。鉴于已经有 IList 并且将有 IList
和 IEnumerable 似乎合理地说“好吧,数组足够接近 IList 以使其工作,所以让我们这样做吧而不是引入一个第三个概念IArray ”。同样,如果泛型首先出现,那么它可能会以不同的方式下降。 -
我刚找到 Array.CreateInstance(type, length) ...
标签: c# arrays generics open-generics