0

让我们假设我有一个IEnumerable<MyType>被调用的myList. 我想使用 lambda 表达式从列表中删除一些项目。

目前,我通过以下方式进行操作:

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 回答