我有一个对象数组,其中一个字段是一个名为includeInReport的布尔字段.在某种情况下,我想默认它始终为真.我知道它就像这样简单:
foreach (var item in awards)
{
item.IncludeInReport = true;
}
Run Code Online (Sandbox Code Playgroud)
但有没有一种平衡的方式来做这个与linq?这更像是为了满足我的好奇心......我的第一个想法是做到这一点......
awards.Select(a => new Award{ IncludeInReport = true, SomeFiled = a.SomeField, .... }
Run Code Online (Sandbox Code Playgroud)
但是因为我的对象中有一些字段,所以我不想输入所有字段,而且此时屏幕上只是杂乱无章.谢谢!
Joe*_*Joe 10
ForEach有点像linq:
awards.ForEach(item => item.IncludeInReport = true);
Run Code Online (Sandbox Code Playgroud)
但Linq不是要更新价值观.所以你没有使用正确的工具.
List<T>
.但是,语法类似于Linq.
这是正确的代码:
awards = awards.Select(a => {a.IncludeInReport = true; return a;});
Run Code Online (Sandbox Code Playgroud)
LINQ 遵循函数式编程思想,因此不希望您更改(变异)现有变量。
因此,在上面的代码中,我们生成一个新列表(没有更改任何现有值),然后覆盖我们的原始列表(这是在 LINQ 之外,因此我们不再关心函数式编程思想)。
由于从数组开始,因此可以使用Array.ForEach
方法:
Array.ForEach(awards, a => a.IncludeInReport = true);
Run Code Online (Sandbox Code Playgroud)
这不是LINQ,但是在这种情况下,您不需要LINQ。正如其他人提到的那样,您不能通过LINQ对项目进行突变。如果您有a List<T>
,则可以类似的方式使用其ForEach
方法。埃里克·利珀特(Eric Lippert)在这里更深入地讨论了这个问题: “ foreach”与“ ForEach”。