【发布时间】:2015-11-11 16:17:15
【问题描述】:
source code 中为 IList、IEnumerable 和 ICollection 提供的 cmets 表示
注意
T[] : IList<T>,我们要确保如果您使用IList<YourValueType>,我们确保可以使用YourValueType[]没有抖动。因此SZArrayHelper上的TypeDependencyAttribute。 这是内部的特殊 hack - 请参阅 VM\compile.cpp。
为什么IList<T> 包含对SZArrayHelper 的依赖?我知道SZArrayHelper 是一个围绕实现IList<T> 接口的数组的CLR 包装器,但我不完全了解为什么这两者结合在一起。
以及它如何确保YourValueType[]可以在不抖动的情况下使用?
【问题讨论】:
-
可能是因为 99.9% 的集合在某种程度上使用数组进行存储,因此需要这种依赖关系是合理的。这会给您带来问题还是您只是好奇?
-
@DStandley:很好奇.. 但它又是如何确保 YourValueType[] 可以在不抖动的情况下使用的。?
-
这与
YourValueType[]本身无关。它是关于在转换为相应的通用接口时使用它。int[]没有实际上实现了IEnumerable<int>.GetEnumerator,尽管它看起来好像实现了——实际的实现在那个神秘的SZArrayHelper类中。