誰か私に説明しIEnumerable
てくれませんか?IEnumerator
たとえば、 foreach ではなく をいつ使用すればよいのでしょうか? と の違いは何でしょうかIEnumerable
?IEnumerator
なぜそれを使用する必要があるのでしょうか?
ベストアンサー1
たとえば、いつ foreach ではなくこれを使用するのでしょうか?
IEnumerable
「over」は使用しませんforeach
。 を実装するとIEnumerable
、使用がforeach
可能になります。
次のようなコードを記述すると:
foreach (Foo bar in baz)
{
...
}
機能的には以下の記述と同等です:
IEnumerator bat = baz.GetEnumerator();
while (bat.MoveNext())
{
Foo bar = (Foo)bat.Current;
...
}
「機能的に同等」とは、実際にコンパイラがコードを変換することを意味します。が実装されていない限り、この例ではforeach
on を使用できません。baz
baz
IEnumerable
IEnumerable
baz
メソッドを実装することを意味する
IEnumerator GetEnumerator()
このメソッドが返すオブジェクトIEnumerator
は、メソッドを実装する必要があります。
bool MoveNext()
そして
Object Current()
IEnumerable
最初のメソッドは、列挙子を作成したオブジェクト内の次のオブジェクトに進み、false
完了した場合は戻り、2 番目のメソッドは現在のオブジェクトを返します。
.NET で反復処理できるものはすべて を実装しますIEnumerable
。独自のクラスを構築していて、そのクラスが を実装するクラスからまだ継承していない場合は、を実装することによって(および新しいメソッドが返す列挙子クラスを作成することによって) IEnumerable
、そのクラスをステートメントで使用できるようになります。foreach
IEnumerable
GetEnumerator