Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
413 of 1492 menu
◀ ▶

Интерфейс IEnumerable

Интерфейс IEnumerable<T> объявляет метод GetEnumerator, который возвращает перечислитель IEnumerator<T>. List<T> реализует этот интерфейс, поэтому по списку можно идти в foreach.

Синтаксис

IEnumerator<T> GetEnumerator();

Пример

Давайте обойдём список как IEnumerable:

using System; using System.Collections.Generic; class Program { static void Main() { List<int> nums = new List<int> {1, 2, 3, 4, 5}; IEnumerable<int> seq = nums; List<int> copy = new List<int>(); foreach (int x in seq) { copy.Add(x); } Console.WriteLine(string.Join(" ", copy)); } }

Результат выполнения кода:

1 2 3 4 5

Пример

Давайте получим перечислитель вручную:

using System; using System.Collections.Generic; class Program { static void Main() { List<int> nums = new List<int> {1, 2, 3, 4, 5}; IEnumerator<int> en = nums.GetEnumerator(); en.MoveNext(); Console.WriteLine(en.Current); } }

Результат выполнения кода:

1

Пример

Давайте обойдём строки:

using System; using System.Collections.Generic; class Program { static void Main() { List<string> items = new List<string> {"a", "b", "c", "d", "e"}; IEnumerable<string> seq = items; Console.WriteLine(seq.GetEnumerator().MoveNext()); } }

Результат выполнения кода:

True

Пример

Давайте используем нетипизированный IEnumerable:

using System; using System.Collections.Generic; using System.Collections; class Program { static void Main() { List<int> nums = new List<int> {1, 2, 3, 4, 5}; System.Collections.IEnumerable seq = nums; int n = 0; foreach (object o in seq) n++; Console.WriteLine(n); } }

Результат выполнения кода:

5

Смотрите также

  • интерфейс IEnumerator,
    который выполняет шаги обхода
  • интерфейс ICollection,
    который расширяет IEnumerable
  • класс List,
    который реализует IEnumerable
  • интерфейс IReadOnlyCollection,
    который тоже допускает перечисление
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить