LINQ:转换集合中的项目

Kla*_*Nji 4 .net c# linq

是否有LINQ方法来修改集合中的项目,例如简单地设置集合中每个项目的属性?像这样的东西:

var items = new []{ new Item { IsActive = true } }
var items = items.Transform(i => i.IsActive = false)
Run Code Online (Sandbox Code Playgroud)

其中Touch枚举每个项目并应用转换.顺便说一句,我知道SELECT扩展方法,但这需要我在进行此转换的类型上公开一个方法并返回相同的引用.

var items = items.Select(i => i.Transform())
Run Code Online (Sandbox Code Playgroud)

其中Item.Transform返回转换并返回相同的实例.

TIA

Jef*_*ado 13

不,标准LINQ中没有允许您修改集合中项目的方法.LINQ用于查询集合,而不是用于引起副作用(例如,改变项目).Eric Lippert在他的博客文章中更详细地介绍了这个想法:"foreach"vs"ForEach".

只需使用一个循环.

foreach (var item in items)
{
    item.IsActive = false;
}
Run Code Online (Sandbox Code Playgroud)


Tet*_*axa 1

有一个ForEach()on List,所以你可以这样做items.ToList().ForEach(i => i.IsActive = false)。不过你可能想读一下这篇文章