C#List <t> lambda查找然后修改元素</t>

时间:2010-02-10 23:40:07

标签: c# lambda generic-list

如何使用lambda

进行此操作
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方法来做到这一点......

任何帮助表示赞赏

单向

2 个答案:

答案 0 :(得分:10)

嗯,你可以做:

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's thoughts on the matter too

答案 1 :(得分:0)

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

我认为上述内容无法编译 .ForEach(...)返回void,它不能位于FindAll()方法的右侧。