【C#】Foreach文の内部処理とIEnumerable型
foreach文はIEnumerableインターフェースを実装しているオブジェクトにのみ使用できる。
IEnumarableインターフェースを実装するには、GetEnumerator()を定義している必要がある。
GetEnumerator()はMoveNext()とCurrentプロパティ、インデックス番号を持つ列挙用オブジェクトを返す。
MoveNextメソッドはインデックス番号を1つ進める。
Currentプロパティはインデックス番号の要素を参照する。
■参考
最終回 オブジェクトをつなぐためのインターフェイス (3/4)
この記事がわかりやすい
Foreach文の処理
1 2 3 4 5 6 |
IEnumerable<int> list = Enumerable.Range(1, 10); //1~10までのコレクションを生成 foreach (var l in list) { Console.WriteLine(l.ToString()); } |
この処理は内部的には以下の処理と同じ。
1 2 3 4 5 6 7 |
IEnumerable<int> list = Enumerable.Range(1, 10); //1~10までのコレクションを生成 var e = list.GetEnumerator(); //列挙用オブジェクトを取得 while (e.MoveNext()) //インデックスを一つ進める { Console.WriteLine(e.Current); } |