Список C # <T>лямбда Найти и изменить элементы - PullRequest
2 голосов
/ 11 февраля 2010

Как бы я поступил так со списком, используя лямбду

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...

Другими словами, найдите все объекты foo, которые Seconds == 0, и измените значение на мою локальную переменную ...

Я не хочу зацикливать список ... Я уверен, что есть способ сделать это простым лямбда-методом ...

Любая помощь приветствуется

Oneway

Ответы [ 2 ]

10 голосов
/ 11 февраля 2010

Ну, вы могли бы сделать:

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

Лично я бы предпочел явный цикл для побочной части, хотя:

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

(Кстати, я предполагаю, что это ссылочный тип. Если это тип значения, есть множество других причин, по которым он не будет работать.)

РЕДАКТИРОВАТЬ: Возможно, вы захотите взглянуть на Мысли Эрика Липперта по этому вопросу тоже .

0 голосов
/ 29 мая 2013
list.FindAll(x => x.Seconds == 0)
    .ForEach(x => x.Seconds = seconds);   

Я считаю, что вышеупомянутое не компилируется.
.ForEach(...) возвращает void, который не может быть справа от метода FindAll().

...