C #: есть ли способ установить свойство объектов в коллекции с помощью лямбда-выражения? - PullRequest
2 голосов
/ 03 марта 2011

Я занимаюсь разработкой небольшого проекта, и я подумал, что могу попробовать что-то, чего не знаю, чтобы узнать что-то новое. У меня есть коллекция сообщений, которая называется msgs. Я хотел бы отфильтровать только непрочитанные и затем установить его на «чтение». Для этого я вызвал метод Where с этим лямбда-выражением, я думаю, что получу список всех непрочитанных сообщений. Теперь я хотел бы установить значение «Чтение» (присвоение «T» свойству MessageRead). Есть ли способ сделать это, используя лямбда-выражения?

Я получил этот код, но метод «Все» - это не то, к чему я стремлюсь, я просто обнаружил, что он проверяет, все ли элементы в списке соответствуют этому условию.

msgs.Where(message => message.MessageRead == 'F').All(message => message.MessageRead = 'T');

Большое спасибо, Оскар

Ответы [ 3 ]

6 голосов
/ 03 марта 2011

Что вам нужно, это метод расширения ForEach, см. Обсуждение здесь: LINQ эквивалент foreach для IEnumerable

5 голосов
/ 03 марта 2011

На самом деле, если бы существовал такой метод, он не имел бы никаких преимуществ по сравнению с обычным оператором foreach.

Эрик Липперт (старший разработчик программного обеспечения в Microsoft) имеет хороший обзор этой темы: «foreach» против «ForEach»

0 голосов
/ 03 марта 2011

Что не так с оператором foreach?Он делает именно то, что вам нужно:

foreach (var msg in msgs.Where(m => m.MessageRead == 'F'))
{
    msg.MessageRead = 'T';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...