IEnumerable, IEnumerator
GetEnumerator()
を定義すると、foreach
でループを回すことができます。
using System; using System.Collections; using System.Collections.Generic; class Program { static IEnumerable<int> G() { yield return 1; yield return 2; } static IEnumerator<int> T() { yield return 3; yield return 4; } static void Main() { // コンパイルエラー: // error CS1579: foreach statement cannot operate on variables of type // `System.Collections.Generic.IEnumerator<int>' // because it does not contain a definition for `GetEnumerator' // or is inaccessible // foreach (var a in T()) // Console.WriteLine(a); var g = G().GetEnumerator(); while (g.MoveNext()) { Console.WriteLine(g.Current); } var t = T(); while (t.MoveNext()) { Console.WriteLine(t.Current); } } }
実行結果です。
1 2 3 4