با استفاده از کلمه کلیدی yield می توان کنترل برنامه را از تابع فراخوانی شده (source) به تابع فراخوانی کننده (caller) برگرداند و بلعکس، یکی از کاربردهای آن yield return است که به برنامه نویس اجازه می دهد که بدون temp collection یک collection را به تابع فراخوانی کننده (caller) برگرداند:
static IEnumerable<int> GetRandomNumbers(int count)
{
Random rand = new Random();
for (int i = 0; i < count; i++)
{
yield return rand.Next();
}
}
متد فوق معادل متد زیر است:
static IEnumerable<int> GetRandomNumbers(int count)
{
Random rand = new Random();
List<int> ints = new List<int>(count);
for (int i = 0; i < count; i++)
{
ints.Add(rand.Next());
}
return ints;
}