我看到以下代码:
using(var iterator = source.GetEnumerator()) {...}
source
是IEnumerable<T>
。
执行上述操作与将source
转换为List<T>
然后对其进行迭代有什么好处?
答案 0 :(得分:3)
将其转换为列表将迭代可枚举一次,并将所有引用(甚至值类型的值)复制到新的List<>
中。然后,您将遍历列表。这意味着你会迭代两次。
使用IEnumerable<>
作为枚举源只迭代序列一次。
为什么有人决定使用枚举器手动执行迭代,而不是将详细信息留给foreach
,这在您发布的小范围内并不清楚。
答案 1 :(得分:2)
转换为List<T>
需要额外的内存和CPU周期才能执行转换,更不用说你要对数据进行两次迭代了。
迭代前无需转换为List<T>
。 foreach
可以迭代任何实现IEnumerable<T>
。