0

IEnumerable<MyType>と呼ばれるものがあると仮定しましょうmyList。ラムダ式を使用してリストからいくつかの項目を削除したいと思います。

現在、私は次の方法でそれを行います:

myList = myList.Where(x=>x.SomeProp == 1);

私は次のようなことをしたいと思います:

myList.Remove(x=>x.SomeProp != 1);

Remove()デフォルトでは存在しないことは知っていますが、同様の方法は存在しますか? または、拡張メソッドを作成する必要がありますか?

4

1 に答える 1

5

IEnumerable<T>それ自体は変更操作を公開しないため、操作を公開することはできませんRemove。からアイテムを削除しようとしているList<T>場合は、使用できList<T>.RemoveAllます。

アイテムを含めるのではなく除外する一種の「逆の場所」が必要な場合は、それを非常に簡単に記述できます。ただし、そうすることが本当に有利かどうかは明らかではありません。通常、述語のロジックを非常に簡単に反転させることができます。またWhere、他のプログラマーには馴染み深いものですが、新しい拡張メソッドはそうではありません。

私は間違いなくそのような操作を呼び出しませんRemove-それは突然変異操作のように聞こえます. 私はおそらくそれを次のように呼ぶでしょうExceptWhere-したがって、次のようになります:

var adults = people.ExceptWhere(person => person.Age < 18);

例として。

于 2013-07-07T18:22:41.180 に答える