Хотя вы специально спрашивали о linq-решении, и этот вопрос довольно старый, я выкладываю non-linq-решение. Это связано с тем, что linq (= встроенный язык query ) должен использоваться для запросов к коллекциям. Все linq-методы не изменяют базовую коллекцию, они просто возвращают новую (или, точнее, итератор новой коллекции). Таким образом, что бы вы ни делали, например Select
не влияет на базовую коллекцию, вы просто получаете новую.
Конечно, вы могли бы сделать это с ForEach
(что, кстати, не linq, а расширение List<T>
). Но этот буквально использует foreach
в любом случае, но с лямбда-выражением. Помимо этого каждый linq-метод внутренне выполняет итерацию вашей коллекции, например. используя foreach
или for
, однако он просто скрывает это от клиента. Я не считаю это более читабельным или обслуживаемым (подумайте о редактировании вашего кода при отладке метода, содержащего лямбда-выражения).
Сказав это, не используйте Linq для изменения предметов в вашей коллекции. Лучший способ - это решение, которое вы уже предоставили в своем вопросе. С помощью классического цикла вы можете легко перебирать свою коллекцию и обновлять ее элементы. На самом деле все эти решения, основанные на List.ForEach
, ничем не отличаются, но гораздо труднее читать с моей точки зрения.
Так что вам не следует использовать linq в тех случаях, когда вы хотите обновить элементов вашей коллекции.