2

我将如何使用 lambda 对 List 执行此操作

List<Foo> list....// create and add a bunch of Foo
int seconds = 100;

list.FindAll(x=>(x.Seconds == 0).Seconds = seconds) // yes I know that wont work...

换句话说,找到 Seconds == 0 的所有 foo 对象并将值更改为我的局部变量...

我不想循环列表......我确信有一种方法可以使用简单的 lambda 方法来做到这一点......

任何帮助表示赞赏

单程

4

2 回答 2

11

好吧,你可以这样做:

list.FindAll(x => x.Seconds == 0)
    .ForEach(x => x.Seconds = seconds);

我个人更喜欢副作用部分的显式循环:

foreach (var x in list.Where(x => x.Seconds == 0))
{
    x.Seconds = seconds;
}

(顺便说一句,我假设这是一个引用类型。如果它是一个值类型,那么还有各种其他原因导致它不起作用。)

编辑:您也不妨看看Eric Lippert 对此事的看法

于 2010-02-10T23:45:24.883 回答
1
list.FindAll(x => x.Seconds == 0)
    .ForEach(x => x.Seconds = seconds);   

我相信上面没有编译。
.ForEach(...)返回不能在方法右侧的 void FindAll()

于 2013-05-29T15:47:30.163 回答