internal class Program { static IEnumerable GetNumber() { yield return 10; // 첫번째 루프에서 리턴되는 값 yield return 20; // 두번째 루프에서 리턴되는 값 yield return 30; // 세번째 루프에서 리턴되는 값 } public class MyList { private int[] data = { 1, 2, 3, 4, 5 }; public IEnumerator GetEnumerator() { int i = 0; while (i < data.Length) { yield return data[i]; i++; } } //... } private static void Main(string[] args) { foreach (int num in GetNumber()) { Console.WriteLine(num); } // (1) foreach 사용하여 Iteration var list = new MyList(); foreach (var item in list) { Console.WriteLine(item); } // (2) 수동 Iteration IEnumerator it = list.GetEnumerator(); it.MoveNext(); Console.WriteLine(it.Current); // 1 it.MoveNext(); Console.WriteLine(it.Current); // 2 } }