C#:有没有办法使用lambda表达式设置集合中对象的属性?
我正在开发一个小项目,我想我可以尝试一些我不知道的东西,这样我可以学到一些新的东西。 我有一个消息集,叫做MSG。我想只过滤未读的,然后设置为“读”。 为此,我用这个lambda表达式调用了Where方法,我想我会得到一个所有未读消息的列表。现在我想将该值设置为“Read”(将'T'分配给MessageRead属性)。有没有办法使用lambda表达式来实现这一点 我得到了这段代码,但是“All”方法不是我想要的,我刚刚发现它检查列表中的所有元素是否都符合这个条件C#:有没有办法使用lambda表达式设置集合中对象的属性?,c#,.net,lambda,C#,.net,Lambda,我正在开发一个小项目,我想我可以尝试一些我不知道的东西,这样我可以学到一些新的东西。 我有一个消息集,叫做MSG。我想只过滤未读的,然后设置为“读”。 为此,我用这个lambda表达式调用了Where方法,我想我会得到一个所有未读消息的列表。现在我想将该值设置为“Read”(将'T'分配给MessageRead属性)。有没有办法使用lambda表达式来实现这一点 我得到了这段代码,但是“All”方法不是我想要的,我刚刚发现它检查列表中的所有元素是否都符合这个条件 msgs.Where(messa
msgs.Where(message => message.MessageRead == 'F').All(message => message.MessageRead = 'T');
非常感谢,
Oscar您所追求的是一种ForEach扩展方法,请参见此处的讨论:事实上,如果有这样一种方法,它将不会比常规的ForEach语句有任何好处
Eric Lippert(微软高级软件设计工程师)对这个主题有很好的概述:foreach语句有什么问题?它正是您所需要的:
foreach (var msg in msgs.Where(m => m.MessageRead == 'F'))
{
msg.MessageRead = 'T';
}
太棒了!谢谢你的帮助!你太快了,我要等10分钟才能接受你的回答,我会尽快给你打分!是的,我知道。在这种情况下,我这样做不是因为它更好,而是因为我想学习它。:)是的。但问题是我已经知道这个了。我想学习新东西,以便在需要时能够使用它们;)@奥斯卡:很公平,虽然学习过程的一部分是发现在不同的场景中合适的技术是什么。“如何使用手机打开啤酒瓶?”的正确答案几乎总是“不要使用手机,使用开瓶器”。嗨!这是真的,但我认为我们可以在不一定需要的时候学到一些东西,但我们有时间/机会这样做,所以在未来,如果我们需要的话,我们已经知道了。不知道,也许在某个时候,剩下的只是一部手机和一瓶水:)