0

我读到了 IEnumerable:

IEnumerable or IEnumerable<T> : by implementing this an object states that it can give you an iterator that you can use to traverse over the sequence/collection/set

那么,该foreach语句仅使用IEnumerable接口来迭代集合吗?

或者它也使用IEnumerator

4

3 回答 3

3

IEnumerable 公开了一个方法,该方法返回一个 IEnumerator。所以,答案是:两者都用。

于 2013-10-23T05:49:40.157 回答
0

IEnumerator 不公开 GetEnumerator 因此 foreach 将引发错误。

IEnumerable numbers = new[]{1,2,3,4,5};
foreach(var number in numbers) //finds GetEnumerator()
{
    Console.WriteLine(number);
}

IEnumerator numbers2 = new[]{1,2,3,4,5}.GetEnumerator();
foreach(var number in numbers2) //cannot find GetEnumerator, throws
{
    Console.WriteLine(number);
}

第二个 foreach 将引发错误,因为 foreach 专门寻找未在 IEnumerator 上公开的 GetEnumerator 方法。

于 2013-10-23T05:50:43.797 回答
0

如果你看一下 IEnumerable 接口,你会发现它唯一的方法就是让 IEnumerator 进行迭代。

于 2013-10-23T05:50:57.277 回答