6

重複の可能性:
yield ステートメントの実装

私はmsdnのドキュメントを見てきましたが、次のように書かれています:

yield キーワードは、それが現れるメソッドが反復子ブロックであることをコンパイラに通知します。コンパイラは、反復子ブロックで表現される動作を実装するクラスを生成します。iterator ブロックでは、yield キーワードを return キーワードと共に使用して、列挙子オブジェクトに値を提供します。

つまり、yieldキーワードはシンタックス シュガーであり、コンパイラは Iterator を生成するという大変な作業を行います。(私は正しいですか?)

では、このシンタックス シュガーに対して生成された実装コードは何でしょうか。

4

1 に答える 1

5

生成されるコードはオリジナルに依存しますが、一般的に言えば、コレクションの現在の状態を追跡するステート マシンが生成されます。

yield statement implementation、Eric Lippert によるこの回答、およびJon Skeet によるこのブログ投稿を参照してください。

于 2011-11-27T12:26:51.367 に答える