
15_Iterators.pptx
- Количество слайдов: 10
Iterators
Итераторы • Для того чтобы перебрать все элементы в некоторой коллекции используется метод foreach. • Итераторы – это «синтаксический сахар» , позволяющий значительно упростить реализацию перечислителей. • Суть его заключается в том, что вместо создания класса и нудного превращения циклических алгоритмов просмотра коллекции в последовательный ее просмотр вам достаточно объявить одно свойство или метод, возвращающие интерфейсы IEnumerator, IEnumerable, IEnumerator<T> или IEnumerable<T>
Итераторы • Метод, реализованный в данных интерфейсах вызывается каждый раз, когда читающий коллекцию код вызывает метод IEnumerator. Move. Next. • Если управление покидает этот метод ненасильственным путем, т. е. без принудительного yield return, то процесс перечисления заканчивается, и метод больше вызываться не будет. • Если же вернуть управление с помощью оператора yield return, то возвращенное в нем значение станет текущим значением перечисления.
Итераторы • Когда перечислителю потребуется следующий элемент (у него вызовут метод Move. Next), управление снова вернется в метод, причем с позиции, следующей непосредственно за той, что привела к выходу из метода в прошлый раз. • Так продолжается до тех пор, пока управление не покинет метод без вызова yield return. Это может случиться, если вызвать yield break или просто дать управлению выйти из метода самостоятельно.
• Пример: Итераторы class My. Collection: Ienumerable { int[] _array; public My. Collection() { _array = new int[] {1, 2, 3}; } public IEnumerator Get. Enumerator() { for (int i=0; i<_array. Length; i++) { yield return _array[i]; } } }
Итераторы static void Main(string[] args) { My. Collection collection = new My. Collection(); IEnumerator enumerator = collection. Get. Enumerator(); while (enumerator. Move. Next()) { Console. Write. Line(enumerator. Current); } }
Итераторы class My. Collection { int[] _array; public My. Collection() { _array = new int[] {1, 2, 3}; } public IEnumerable Get. Array { get { foreach (int i in _array) { yield return i; } }
Итераторы static void Main(string[] args) { My. Collection collection = new My. Collection(); foreach (int item in collection. Get. Array) { Console. Write. Line(item); } }
? ? Questions? ? ? ?
15_Iterators.pptx