Using an Iterator Within a for Loop

An iterator block could contain a series of yield statements to return individual elements of a sequence.
1
2
3
4
5
6
private static IEnumerable<Dog> ListOfDogs()
{
    yield return new Dog("Jack", 17);
    yield return new Dog("Kirby", 14);
    yield return new Dog("Lassie", 72);
}
More commonly, however, an iterator block will contain a loop that generates a sequence, with a yield statement that returns a new element of the sequence each time through the loop.
The example below returns a portion of the Fibonacci sequence, with each element in the sequence after the first two returned by a yield statement within the loop.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
static void Main()
{
    foreach (int i in Fibonacci(20))
        Console.WriteLine(i);
}
 
private static IEnumerable<int> Fibonacci(int numInSeq)
{
    yield return 0;
    yield return 1;
 
    int last = 0;
    int current = 1;
 
    for (int i = 0; i < (numInSeq - 2); i++)
    {
        int next = last + current;
        yield return next;
        last = current;
        current = next;
    }
}