2

100,000 個のオブジェクトを含む BindingList があります。各オブジェクトには、オブジェクトが変更されたかどうかを示す bool プロパティが含まれています。私は基本的にオブジェクトをループしたいのですが、その bool プロパティが true に設定されているオブジェクトを見つけたら、それを false に設定したいと考えています。これに似たもの:

foreach (myObject obj in bindingListOfMyObjects)
{
    if (obj.Modified)
    {
        obj.Modified = false;
    }
}

LINQ を使用してこれを行うことは可能ですか? そして、それは上記のコードよりも速いでしょうか?

4

2 に答える 2

2

いいえ。LINQ でこれを行う方法はありません。これを機能させるには、 で要素を直接変更する必要がありますBindingList。LINQ は単純に new を返しIEnumerableます。

于 2013-01-25T17:55:26.510 に答える
2

コレクションをフィルタリングするために使用できEnumerable.Where、ループ内でそれらを変更します。

foreach (myObject obj in bindingListOfMyObjects.Where(o => o.Modified))
     obj.Modified = false;

意図を理解するのが少し簡単になるかもしれませんが、これはそれほど速くはありません。

一般に、実際に変更を加えるために LINQ を使用しないことに注意してください。LINQ クエリは、その性質上、副作用 (値の変更) を引き起こすべきではありません。これらはクエリとして使用することを目的としているため、オブジェクトをフィルタリングしてからループで設定するのが適切です。詳細については、ForEach vs foreach に関する Eric Lippert の投稿を読むことをお勧めします。

于 2013-01-25T18:00:49.660 に答える