2010-02-10 3 views
2

Как бы я идти об этом со списком с помощью лямбдаC# Список <T> лямбда Найти затем Изменить элементы

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 что Секунды == 0 и измените значение моя локальная переменная ...

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

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

Oneway

ответ

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; 
} 

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

EDIT: Вы можете взглянуть на Eric Lippert's thoughts on the matter too.

+0

Отлично ... спасибо ... в этом случае верхний метод работает и кажется самым чистым ... в основном все, что я делаю/нужно делать, это взять все предметы, чьи секунды == 0 в быстром движении. . Измените этот метод расширения ForEach ... спасибо – Oneway

+1

ya его тип ref ... – Oneway

+0

В этом случае, если у меня есть индексы элементов, которые нужно изменить, как мне его записать? – Jimmy

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^