LINQ:如何通过对每个元素执行计算来转换列表

bza*_*fir 2 c# linq sum transform

我上课了

Class MyObject
{
    decimal v1;
    decimal dv1;
    decimal v2;
    decimal dv2;
}
Run Code Online (Sandbox Code Playgroud)

和a

List<MyObject> ...
Run Code Online (Sandbox Code Playgroud)

我需要通过将dv1添加到v1并将dv2添加到v2来处理列表的每个元素.(伪语法):

myList.Transform(o=>o.v1+=o.dv1, o.v2+=o.dv2)
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做(显然我的伪语法不起作用)?

谢谢

Oli*_*ver 7

LINQ用于获取给定枚举的子集,或者使用列表中的新类型创建枚举.

要操作给定列表,LINQ不是操作给定列表的正确工具.要完成你的任务,你应该采取类似的foreach循环

foreach(var item in objects)
{
    item.v1 += obj.dv1;
}
Run Code Online (Sandbox Code Playgroud)

你可以做的是预先选择,你想要的对象中的哪些元素是这样的

foreach(var item in object.Where(o => o.v1 % 2 == 0))
Run Code Online (Sandbox Code Playgroud)

像其他提到的一样,你可以自己实现一个ForEach()扩展方法,但是有一个原因它不存在:
看看Erics Blog条目.


Mat*_*ott 5

您可以使用List的ForEach方法:

List<MyObject> objects = new List<MyObject>();

// Populate list.

objects.ForEach(obj => {
  obj.v1 += obj.dv1;
  obj.v2 += obj.dv2;
});
Run Code Online (Sandbox Code Playgroud)