他の質問here...の提案された回答に基づいて、LINQ列挙中に変数を更新してテストの一部として使用することは可能ですか?反復処理中にLINQ文内の値をリアルタイムに設定/更新できますか?
たとえば、これは可能ですか?
// Assume limitItem is of type Foo and sourceList is of type List<Foo>
// Note the faux attempt to set limitItemFound in the TakeWhile clause
// That is what I'm wondering.
sourceList.Reverse()
.TakeWhile(o => (o != limitItem) && !limitItemFound; limitItemFound = limitItemFound || (o == limitItem))
.FirstOrDefault(o => ...);
これにより、limitItemを含む検索が行われます。オブジェクトへ
LINQのために
私はこれは*可能です*と信じていますが、あなたは本当に一度、あなたが期待したとき、そしてあなたが期待する順序で評価されていることに注意する必要があります。 –
もっと詳しく説明できますか? (また、私はqを更新しました。論理的な欠陥がありました) – MarqueIV
FirstOrDefaultを返すだけでOKですが、IEnumerableとして保持し、基礎となる実装に応じて2回反復する場合はOKです実際にはTakeWhileを2回評価して、2回目に変数の残存値を残します。 (私は思う) –