为什么这里不使用 LINQ ToList?

Why is LINQ ToList not used here?

我看到以下代码:

using(var iterator = source.GetEnumerator()) {...}

其中 sourceIEnumerable<T>

与将 source 转换为 List<T> 然后对其进行迭代相比,执行上述操作有何优势?

  1. 转换为 List<T> 需要额外的内存和 CPU 周期来执行转换,更不用说您将迭代数据两次。

  2. 迭代前无需转换为 List<T>foreach 可以迭代任何实现 IEnumerable<T>.

  3. 的东西

将其转换为列表将迭代一次可枚举并将所有引用(甚至值类型的值)复制到新的 List<> 中。然后,您将遍历列表。这意味着您将迭代两次。

使用 IEnumerable<> 作为枚举源仅迭代序列一次。

为什么有人决定使用枚举器手动进行迭代而不是将细节留给 foreach 从您发布的小范围来看不清楚。