Early Termination C# with Example
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 CountUntilAny(int start, HashSet 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; } curr++; } } 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{ 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) Console.WriteLine(x); } Output: 1 2 3 4 5 6 Live Demo on .NET Fiddle