为什么这里不使用 LINQ ToList?
Why is LINQ ToList not used here?
我看到以下代码:
using(var iterator = source.GetEnumerator()) {...}
其中 source
是 IEnumerable<T>
。
与将 source
转换为 List<T>
然后对其进行迭代相比,执行上述操作有何优势?
转换为 List<T>
需要额外的内存和 CPU 周期来执行转换,更不用说您将迭代数据两次。
迭代前无需转换为 List<T>
。 foreach
可以迭代任何实现 IEnumerable<T>
.
的东西
将其转换为列表将迭代一次可枚举并将所有引用(甚至值类型的值)复制到新的 List<>
中。然后,您将遍历列表。这意味着您将迭代两次。
使用 IEnumerable<>
作为枚举源仅迭代序列一次。
为什么有人决定使用枚举器手动进行迭代而不是将细节留给 foreach
从您发布的小范围来看不清楚。
我看到以下代码:
using(var iterator = source.GetEnumerator()) {...}
其中 source
是 IEnumerable<T>
。
与将 source
转换为 List<T>
然后对其进行迭代相比,执行上述操作有何优势?
转换为
List<T>
需要额外的内存和 CPU 周期来执行转换,更不用说您将迭代数据两次。迭代前无需转换为
List<T>
。foreach
可以迭代任何实现IEnumerable<T>
. 的东西
将其转换为列表将迭代一次可枚举并将所有引用(甚至值类型的值)复制到新的 List<>
中。然后,您将遍历列表。这意味着您将迭代两次。
使用 IEnumerable<>
作为枚举源仅迭代序列一次。
为什么有人决定使用枚举器手动进行迭代而不是将细节留给 foreach
从您发布的小范围来看不清楚。