最後の最後の前にアイテムを見つけたとすると、ソースシーケンス全体を繰り返すことはありません。最初のアイテムが返されるとすぐに停止します。
これは有用な例えです。テーブルに隣同士に座っている人々のグループを想像してみてください。「マイク」は左端に座っています。彼の隣の人が彼にアイテムを求めるときはいつでも、彼はスタックから一枚の紙をつかみ、それを次の人に渡します。彼は、基になるデータの「列挙子」になりますrecords
。
彼の隣に座っているのは「フレッド」です。フレッドは、アイテムを求められると、マイクにアイテムを求めます。マイクが彼に与えるアイテムに「ヘンリークレイ」と書かれている場合、彼は次の人にそれを渡します。そうでない場合、彼はマイクに別のアイテムを要求します。これは、フレッドが最終的に彼の条件を満たすアイテムを取得するか、マイクがアイテムを使い果たすまで続きます。彼はWhere
列挙者を代表しています。
フレッドの右側には「アーロン」があります。アーロンは、アイテムを求められると、フレッドにアイテムを求めます。フレッドからアイテムを受け取ったら、次の人に渡します。次に誰かがアイテムを要求すると、フレッドに何も要求せずに、すぐに「いいえ、もう完了しました」と言います。彼は代表していFirstOrDefault
ます。
各人は、隣の人からアイテムを求められた場合、求められた場合にのみ、「ソース」からアイテムを取得し、処理するか、必要なことを実行して、次の人のアイテムを生成します。この例を使用すると、アーロンが最初のアイテムを取得すると、スタックに紙が残っている可能性が非常に高いことが想像できます。アーロンがフレッドに2番目のアイテムを要求することは決してないので、彼らは誰にも処理されずにそこにとどまります。