有没有办法在LINQ中设置值?

ast*_*ght 10 c# linq

有没有更好的方法来使用LINQ进行这些分配?

IEnumerable<SideBarUnit> sulist1 = newlist.Where(c => c.StatusID == EmergencyCV.ID);
foreach (SideBarUnit su in sulist1) su.color = "Red";
Run Code Online (Sandbox Code Playgroud)

Dan*_*den 8

没有.

你可以做这样的事情,正如其他答案在这里指出的那样,但是你不再使用LINQ了.

Eric Lippert写了一篇关于这个主题的优秀博客文章,我强烈建议你阅读.这是一段摘录:

出于两个原因,我在哲学上反对提供这样的方法.

第一个原因是这样做违反了所有其他序列运算符所基于的函数式编程原则.显然,调用此方法的唯一目的是引起副作用.

表达式的目的是计算一个值,而不是引起副作用.

...

第二个原因是,这样做会增加语言的新代表性能力.这样做可以让你重写这个完全清晰的代码:

foreach(Foo foo in foos){ statement involving foo; }
Run Code Online (Sandbox Code Playgroud)

进入这段代码:

foos.ForEach((Foo foo)=>{ statement involving foo; });
Run Code Online (Sandbox Code Playgroud)

它使用几乎完全相同的字符,顺序略有不同.然而第二个版本更难理解,更难调试,并引入了闭包语义,从而可能以微妙的方式改变对象的生命周期.

  • +1其他人提到了它,其他人已经开始并展示了ForEach()的例子.我在这里与Eric Lippert达成了一致.也许明确地发布这个摘录将说服OP,或者可能不会.仍然是最好的答案IMO. (2认同)