Iterator thực hiện duyệt tùy chỉnh (custom iteration) trên tập hợp. Sử dụng yield return để trả về từng phần tử một. Iterator nhớ vị trí hiện tại và lần lặp sau trả về phần tử tiếp theo.
Ví dụ: Iterator method trả về IEnumerable<string>
using System;
using System.Collections.Generic;
using System.Linq;
namespace Demo
{
class Program
{
public static IEnumerable<string> Display()
{
int[] arr = new int[] { 99, 45, 76 };
foreach (var val in arr)
{
yield return val.ToString(); // Trả về từng cái một
}
}
public static void Main(string[] args)
{
IEnumerable<string> ele = Display();
foreach (var element in ele)
{
Console.WriteLine(element);
}
}
}
}
Kết quả
99
45
76
Cơ chế: Khi gọi Display(), code không chạy ngay mà trả về IEnumerable. Chỉ khi duyệt (foreach) thì code chạy đến yield return, tạm dừng, trả về giá trị, lần sau tiếp tục từ chỗ dừng.
Lợi ích: Lazy evaluation (tính toán khi cần), tiết kiệm bộ nhớ cho chuỗi lớn/vô hạn, code rõ ràng hơn so với tự triển khai IEnumerator.