Интерфейс IEnumerable в C#
Интерфейс IEnumerable <T> - контракт «можно перебрать»: единственный член GetEnumerator возвращает IEnumerator<T> для пошагового чтения.
Массивы, списки, результаты LINQ и генераторы yield реализуют этот интерфейс. Код, принимающий IEnumerable<T>, не зависит от конкретного хранилища.
Переберём массив через foreach. Цикл видит только интерфейс: ему нужен перечислитель, а не знание, что внутри массив. Каждый новый foreach берёт свой перечислитель, поэтому повторный обход nums снова отдаёт те же значения:
IEnumerable<int> nums = new[] { 2, 4, 6 };
foreach (int n in nums)
{
Console.WriteLine(n); // выведет 2, 4, 6
}
Напишите метод, который принимает IEnumerable<string>. Передайте ему метки "core" и "edge" и выведите, сколько элементов он перебрал.