0
0
CsharpHow-ToBeginner · 3 min read

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 IEnumerable or IEnumerable<T>. Using List<T> or other types will cause errors.
  • Using yield return outside iterator methods: You cannot use yield return in methods that do not return an enumerable type.
  • Statefulness: The method's state is preserved between yield return calls, 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 IEnumerable or IEnumerable<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.