如何迭代集合并使用LINQ扩展方法更改值?

Kin*_*tor 9 .net c# linq linq-to-objects

假设我有一组消息,其中包含"UserID"(int)和"Unread"(bool)属性.

对于UserID = 5的集合中的任何Message,如何使用LINQ扩展方法设置Unread = false?

所以,我知道我可以这样做:

messages.Any(m => m.UserID == 5);
Run Code Online (Sandbox Code Playgroud)

但是,如何使用扩展方法设置每个的Unread属性呢?

注意:我知道我不应该在生产代码中这样做.我只是想学习更多LINQ-fu.

SLa*_*aks 6

实际上,这可以仅使用内置的LINQ扩展方法而不使用ToList.
我相信这将与常规for循环非常相似.(我还没检查过)

不敢在实际代码中这样做.

messages.Where(m => m.UserID == 5)
        .Aggregate(0, (m, r) => { m.Unread = false; return r + 1; });
Run Code Online (Sandbox Code Playgroud)

作为额外的奖励,这将返回其修改的用户数量.

  • 你能解释一下为什么我们不应该在生产代码中这样做吗? (2认同)

Dav*_*vid 5

messages.Where(m => m.UserID == 5).ToList().ForEach(m => m.Unread = false);

然后提交更改.

  • 选择不对 - 这将返回一个`IEnumerable <bool>`.你的意思是"哪里". (3认同)