где
foreach.
Именованные итераторы оказываются весьма полезными в некоторых ситуациях, поскольку они позволяют передавать аргументы итератору, управляющему процессом получения конкретных элементов из коллекции. Например, итератору можно передать начальный и конечный пределы совокупности элементов, возвращаемых из коллекции итератором. Эту форму итератора можно перегрузить, расширив ее функциональные возможности. В приведенном ниже примере программы демонстрируются два способа применения именованного итератора для получения элементов коллекции. В одном случае элементы перечисляются в заданных начальном и конечном пределах, а в другом — элементы перечисляются с начала последовательности и до указанного конечного предела.
// Использовать именованные итераторы.
using System;
using System.Collections;
class MyClass { char ch = 'A';
// Этот итератор возвращает буквы английского алфавита,
}
}
class ItrDemo4 {
static void Main() {
MyClass me = new MyClass ();
Console.WriteLine("Возвратить по очереди первые 7 букв:"); foreach(char ch in mc.MyItr(7))
Console.Write(ch + " ");
Console .WriteLine (lf\nlf) ;
Console.WriteLine("Возвратить по очереди буквы от F до L:"); foreach(char ch in mc.Myltr(5, 12))
Console.Write(ch + " ");
Console.WriteLine();
}
}
Эта программа дает следующий результат.
Возвратить по очереди первые 7 букв:
А В С D Е F G
Возвратить по очереди буквы от F до L:
F G Н I J К L
Создание обобщенного итератора
В приведенных выше примерах применялись необобщенные итераторы, но, конечно, ничто не мешает создать обобщенные итераторы. Для этого достаточно возвратить объект обобщенного типаIEnumerator
// Простой пример обобщенного итератора, using System;
using System.Collections.Generic;
class MyClass
T [ ] array;
public MyClass(T[] a) { array = a;
}
// Этот итератор возвращает символы из массива chrs. public IEnumetator
foreach(T obj in array) yield return obj;
}
}
class GenericItrDemo { static void Main() {
int [ ] nums ={4, 3, 6,
MyClass
foreach(int x in me)
Console.Write(x + " ");
Console.WriteLine();
bool[] bVals = { true, true, false, true };
MyClass
foreach(bool b in mc2)