Коллекция - это класс, содержащий массив/список однотипных элементов. Для перебора коллекции в foreach
требуется реализовать интерфейсы IEnumerable
, IEnumerator
.
Ключевое слово yield
сообщает компилятору, что метод, в котором оно содержится, является блоком итератора.Для реализации поведения, определенного в блоке итератора, компилятор создает класс. В блоке итератора ключевое слово yield
используется совместно с ключевым словом return
для предоставления значения объекту перечислителя, например значения, возвращаемого в каждом цикле оператора foreach
. Также ключевое слово yield
используется вместе с ключевым словом break
для обозначения конца итерации.
Оператор
yield
не может использоваться в анонимных методах.
public IEnumerator GetEnumerator()
{
for (var i = 0; i < collection.Length; i++)
{
yield return collection[i];
}
}
Реализация foreach
методами реализованного интерфейса.
IEnumerator enumerator = collection.GetEnumerator();
while(enumerator.MoveNext())
{
string element = enumerator as String;
// user code //
}
foreach (string element in collection)
{
// user code //
}
Подробнее про yield: