Essential C# Yield Keyword  Suggest an edit

Early Termination

You can extend the functionality of existing yield methods by passing in one or more values or elements that could define a terminating condition within the function by calling a yield break to stop the inner loop from executing.

public static IEnumerable<int> CountUntilAny(int start, HashSet<int> earlyTerminationSet)
    int curr = start;

    while (true)
        if (earlyTerminationSet.Contains(curr))
            // we've hit one of the ending values
            yield break;

        yield return curr;

        if (curr == Int32.MaxValue)
            // don't overflow if we get all the way to the end; just stop
            yield break;


The above method would iterate from a given start position until one of the values within the earlyTerminationSet was encountered.

// Iterate from a starting point until you encounter any elements defined as 
// terminating elements
var terminatingElements = new HashSet<int>{ 7, 9, 11 };
// This will iterate from 1 until one of the terminating elements is encountered (7)
foreach(var x in CountUntilAny(1,terminatingElements))
    // This will write out the results from 1 until 7 (which will trigger terminating)


1 2 3 4 5 6

Live Demo on .NET Fiddle

Table Of Contents
22 Enum
107 Stream
108 Timers
118 Yield Keyword
  ↑ ↓ to navigate     ↵ to select     Esc to close