How to Use yield return in C#: Syntax and Examples
In C#,
yield return is used inside an iterator method to return each element one at a time, pausing the method's execution until the next element is requested. It simplifies creating enumerables without needing to build a collection manually.Syntax
The yield return statement is used inside a method that returns IEnumerable or IEnumerable<T>. Each yield return returns one element to the caller and pauses the method until the next element is requested.
The method must have a return type of IEnumerable or IEnumerable<T>. You can use multiple yield return statements to return multiple values one by one.
csharp
IEnumerable<int> GetNumbers() { yield return 1; yield return 2; yield return 3; }
Example
This example shows a method that uses yield return to return numbers from 1 to 5 one at a time. The foreach loop consumes the iterator and prints each number.
csharp
using System; using System.Collections.Generic; class Program { static IEnumerable<int> GetNumbers() { for (int i = 1; i <= 5; i++) { yield return i; } } static void Main() { foreach (int number in GetNumbers()) { Console.WriteLine(number); } } }
Output
1
2
3
4
5
Common Pitfalls
- Wrong return type: The method must return
IEnumerableorIEnumerable<T>. UsingList<T>or other types will cause errors. - Using
yield returnoutside iterator methods: You cannot useyield returnin methods that do not return an enumerable type. - Statefulness: The method's state is preserved between
yield returncalls, so avoid modifying shared state unexpectedly.
csharp
/* Wrong: Method returns List<int> but uses yield return */ // List<int> GetNumbers() // { // yield return 1; // Error: Cannot use yield return here // } /* Correct: Method returns IEnumerable<int> */ IEnumerable<int> GetNumbers() { yield return 1; }
Quick Reference
yield return <value>: Returns one element and pauses execution.- Method return type must be
IEnumerableorIEnumerable<T>. - Use
yield break;to end iteration early. - Enables lazy evaluation and efficient memory use.
Key Takeaways
Use
yield return inside methods returning IEnumerable or IEnumerable<T> to return elements one by one.yield return pauses method execution, resuming when the next element is requested.Avoid using
yield return in methods with incompatible return types like List<T>.Use
yield break; to stop iteration early if needed.This feature helps write cleaner, memory-efficient code for sequences.