Từ khóa yield giúp thực hiện custom stateful iteration (lặp có trạng thái) qua collection. Nghĩa là khi dùng yield, control di chuyển qua lại giữa caller function và source.
Ví dụ
using System;
using System.Collections.Generic;
namespace DemoApplication
{
class Program
{
static List numbersList = new List { 1, 2, 3, 4, 5 };
public static void Main()
{
foreach (int i in RunningTotal())
{
Console.WriteLine(i);
}
Console.ReadLine();
}
public static IEnumerable RunningTotal()
{
int runningTotal = 0;
foreach (int i in numbersList)
{
runningTotal += i;
yield return (runningTotal);
}
}
}
}
Kết quả
1 3 6 10 15
Trong ví dụ, foreach của Main method lặp qua numbers list của RunningTotal. Mỗi khi yield return được gọi, control quay về Main foreach và in giá trị. Sau khi in, control quay lại foreach của RunningTotal. Điểm quan trọng: giá trị trước được bảo toàn. Yield keyword tạo ra lazy enumeration qua collection items hiệu quả hơn.