使用lambda修改当前源

时间:2013-07-07 18:20:15

标签: c# asp.net

假设我有IEnumerable<MyType>名为myList。我想使用lambda表达式从列表中删除一些项目。

目前,我是按照以下方式进行的:

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

我想做点什么:

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

我知道默认情况下Remove()不存在,但是存在类似的方法吗?或者我是否必须编写扩展方法?

1 个答案:

答案 0 :(得分:5)

IEnumerable<T>本身不会暴露任何变异操作 - 因此无法公开Remove操作。如果您尝试从List<T>移除项目,则可以使用List<T>.RemoveAll

如果你想要一种排除而不是包含项目的“反向位置”,那么你可以很容易地写出来。不清楚这样做真的有利 - 你通常可以很容易地反转谓词的逻辑,虽然Where对于其他程序员来说很熟悉,但你的新扩展方法不会。

我肯定不会调用这样的操作Remove - 这听起来像是一个变异操作。我可能会称它为ExceptWhere - 所以你有:

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

作为一个例子。