5

ここで私の他の質問に対する提案された回答に基づいて...テストの一部として使用できるように、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 が含まれるようになります。

4

1 に答える 1

7

LINQ to Objects ( delegatesを取る) の場合は、はい、ステートメント lambdaを使用して、次のことができます。

sourceList.Reverse()
    .TakeWhile(o =>  { 
             ... fairly arbitrary code here
             return someValue;
         })
    .FirstOrDefault(o => ...);

ただし、これを行うことは強くお勧めしません。慣用的な LINQ コードの宣言的な性質が失われているため、何が起こっているのかを理解するのがはるかに難しくなります

于 2013-10-03T16:44:01.940 に答える