让我们假设我有一个IEnumerable<MyType>被叫myList.我想使用lambda表达式从列表中删除一些项目.
目前,我通过以下方式进行:
myList = myList.Where(x=>x.SomeProp == 1);
Run Code Online (Sandbox Code Playgroud)
我想做的事情如下:
myList.Remove(x=>x.SomeProp != 1);
Run Code Online (Sandbox Code Playgroud)
我知道Remove()默认情况下不存在,但是存在类似的方法吗?或者我是否必须编写扩展方法?
IEnumerable<T>本身不会暴露任何变异操作 - 因此您无法公开Remove操作.如果你试图从List<T>你可以使用的项目中删除项目List<T>.RemoveAll.
如果你想要一种排除而不是包含项目的"反向位置",那么你可以很容易地写出来.现在还不清楚这样做是否真的有利 - 你通常可以很容易地反转谓词的逻辑,虽然Where其他程序员熟悉,但你的新扩展方法不会.
我绝对不会称这样的操作Remove- 这听起来像是一个变异操作.我可能会称之为ExceptWhere- 所以你有:
var adults = people.ExceptWhere(person => person.Age < 18);
Run Code Online (Sandbox Code Playgroud)
举个例子.
| 归档时间: |
|
| 查看次数: |
56 次 |
| 最近记录: |