Array 只是扩展了 IEnumerable 的非泛型版本,那么当 foreach 循环经过一个值类型数组时,会不会有装箱和拆箱呢?
我猜不是,因为那会很蹩脚。
如果我的猜测是正确的,那么 foreach 是如何通过值类型数组的呢?它不使用 Array.GetEnumerator 方法吗?如果不是,为什么 Array 扩展 IEnumerable?
谢谢
最佳答案
Array
在运行时有很多特殊的套管。特别是它是伪通用的。即,如果您指定一个具体的数组类型,如 T[]
实现通用集合接口(interface),如 IEnumerable<T>
.
如果我没记错的话,它甚至支持 foreach
的非装箱迭代。在泛型之前通过 GetEnumerator
返回具有强类型 Current
的具体类型.这工作自 foreach
不需要IEnumerator
/IEnumerable
接口(interface),但也适用于正确命名的成员。
所以你可以用 foreach
遍历数组没有拳击。
关于.net - 在 .NET 中,Array 只扩展了 IEnumerable,那么当 foreach 循环经过值类型数组时,是否会有装箱和拆箱?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5674388/