使用lambda修改当前源
本文关键字:修改 lambda 使用 | 更新日期: 2023-09-27 18:21:28
让我们假设我有一个名为myList
的IEnumerable<MyType>
。我想使用lambda表达式从列表中删除一些项。
目前,我采用以下方式:
myList = myList.Where(x=>x.SomeProp == 1);
我想做一些类似的事情:
myList.Remove(x=>x.SomeProp != 1);
我知道默认情况下Remove()
不存在,但是否存在类似的方法?还是我必须写一个扩展方法?
IEnumerable<T>
本身不公开任何突变操作,因此不能公开Remove
操作。如果您试图从List<T>
中删除项目,则可以使用List<T>.RemoveAll
。
如果你想要一种排除而不是包含项目的"反向where",那么你可以很容易地写出来。不过,目前还不清楚这样做是否真的有好处——你通常可以很容易地反转谓词的逻辑,虽然Where
对其他程序员来说很熟悉,但你的新扩展方法不会。
不过,我肯定不会调用这样的操作Remove
——这听起来像是一个变异操作。我可能会称之为ExceptWhere
,所以你会有:
var adults = people.ExceptWhere(person => person.Age < 18);
作为一个例子。