迭代IEnumerable <T>.最好的办法?

Jua*_*gui 7 c#

期待该方法的实施

void InsertRange(int index, IEnumerable<T> collection)
Run Code Online (Sandbox Code Playgroud)

在List <>类(.NET Framework 4.5.2)中,我可以看到像这样的集合的迭代

using(IEnumerator<T> en = collection.GetEnumerator()) {
    while(en.MoveNext()) {
        Insert(index++, en.Current);                                    
    }                
}
Run Code Online (Sandbox Code Playgroud)

我想知道更喜欢这种语法的原因是什么

foreach(var item in collection)
{
    Insert(index++, item)
}
Run Code Online (Sandbox Code Playgroud)

我使用不同的方法创建了一个包含两个方法的程序集.然后,查看生成的IL代码,我可以看到两个方法都调用了Dispose方法,IEnumerator<T>并由此实现了IDisposable.

所以IDisposable不是原因,这是我的问题.

除了简单的样式(ish)首选项之外,有没有理由比其他语法更喜欢一种语法?

Fra*_*ein 5

foreach是推荐的方法,因为您没有指定有关如何迭代枚举的详细信息.此外,您编写的代码更少,而且更具可读性.