Использование foreach в C#
Я читал о 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
тоже?
3 ответа
IEnumerable предоставляет единственный метод, который возвращает IEnumerator. Итак, ответ: он использует оба.
Если вы посмотрите на интерфейс IEnumerable, вы обнаружите, что его единственный метод - заставить IEnumerator выполнять итерации.
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 специально ищет метод GetEnumerator, который не представлен в самом IEnumerator.