【发布时间】:2023-04-01 21:49:01
【问题描述】:
IEnumerator / IEnumerable 的 compiler-generated implementation 用于 yield 方法和 getter 似乎是一个类,因此分配在堆上。但是,其他 .NET 类型(例如 List<T>)专门返回 struct 枚举器以避免无用的内存分配。通过对C# In Depth 帖子的快速概述,我认为这里没有理由不这样做。
我错过了什么吗?
【问题讨论】:
-
我刚刚意识到,由于返回类型是一个接口(@987654330@ 或
IEnumerator),所以无论如何它是would get boxed,对吗?在这种情况下,不能将方法更改为返回显式类型的枚举器(如List<T> does)吗?由于它实现了接口,因此应保留对它的所有代码引用。 (IIRC,这是因为foreach是detected by pattern)。
标签: c# struct heap-memory ienumerable yield