Использование 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.

Другие вопросы по тегам