17

私は VB.Net 開発者であり、C# の初心者のようなものです。C# のドキュメントを見ながら、イテレーターとジェネレーターを使用しましたが、使用方法を完全には理解できませんでした。

4

1 に答える 1

30

IEnumerable<T>イテレータは、IEnumerator<T>自分で実装する必要なく、アイテムのシーケンスを生成する簡単な方法です。IEnumerable<T>イテレータは、 foreach ループで列挙できるを返すメソッドです。

簡単な例を次に示します。

public IEnumerable<string> GetNames()
{
    yield return "Joe";
    yield return "Jack";
    yield return "Jane";
}

foreach(string name in GetNames())
{
    Console.WriteLine(name);
}

ステートメントに注意してyield returnください。これらのステートメントは実際にはメソッドから返されるのではなく、実装を読んでいる人に次の要素を「プッシュ」するだけです。

コンパイラがイテレータ ブロックを検出すると、実際にはそれを と を実装するクラスのステート マシンに書き換えIEnumerable<T>ますIEnumerator<T>。イテレータの各yield returnステートメントは、そのステート マシンの状態に対応します。

イテレータの詳細については、Jon Skeet によるこの記事を参照してください。

于 2010-09-22T10:05:24.307 に答える