Creating Iterators Using Yield C# with Example
Iterators produce enumerators. In C#, enumerators are produced by deﬁning methods, properties or indexers that
contain yield statements.
Most methods will return control to their caller through normal return statements, which disposes all state local to
that method. In contrast, methods that use yield statements allow them to return multiple values to the caller on
request while preserving local state in-between returning those values. These returned values constitute a
sequence. There are two types of yield statements used within iterators:
yield return, which returns control to the caller but preserves state. The callee will continue execution from
this line when control is passed back to it.
yield break, which functions similarly to a normal return statement - this signiﬁes the end of the sequence.
Normal return statements themselves are illegal within an iterator block.
This example below demonstrates an iterator method that can be used to generate the Fibonacci sequence:
IEnumerable Fibonacci(int count)
int prev = 1;
int curr = 1;
for (int i = 0; i < count; i++)
yield return prev;
int temp = prev + curr;
prev = curr;
curr = temp;
This iterator can then be used to produce an enumerator of the Fibonacci sequence that can be consumed by a
calling method. The code below demonstrates how the ﬁrst ten terms within the Fibonacci sequence can be
foreach (int term in Fibonacci(10))