.net - 在 .NET 中,Array 只扩展了 IEnumerable,那么当 foreach 循环经过值类型数组时,是否会有装箱和拆箱?

标签 .net arrays generics foreach value-type

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/

相关文章:

.net - 使用 DeveloperExceptionPage 时如何使用 ApplicationInsights 2.x 记录 ASP.NET Core 应用程序中的异常

c++ - 如何访问 mex 文件中 Matlab 结构数组中的数据

c# - 如何使用 LINQ 获取数组重叠?

java - 使用 Guice,如何注入(inject)有界通配符类?

c# - default(T) 返回 null 其中 T 继承自 DataContext

generics - F#:尝试通过界面复制和更新记录时出错

c# - 如何向我的 backgroundworker dowork 事件添加耗时的进度?

c# - 与多个版本的 Word 互操作

c# - .NET 多线程与多处理 : Awful Parallel. ForEach 性能

Java读取文件并将文本存储为数组