我有一个类
Class MyObject
{
decimal v1;
decimal dv1;
decimal v2;
decimal dv2;
}
并且一个
List<MyObject> ...
我需要通过将dv1加到v1和将dv2加到v2来处理列表中的每个元素。类似于以下伪代码:
myList.Transform(o=>o.v1+=o.dv1, o.v2+=o.dv2)
我的伪代码语法明显无法正常运行,我该怎么做?
谢谢你。
我有一个类
Class MyObject
{
decimal v1;
decimal dv1;
decimal v2;
decimal dv2;
}
并且一个
List<MyObject> ...
myList.Transform(o=>o.v1+=o.dv1, o.v2+=o.dv2)
我的伪代码语法明显无法正常运行,我该怎么做?
谢谢你。
foreach(var item in objects)
{
item.v1 += obj.dv1;
}
foreach(var item in object.Where(o => o.v1 % 2 == 0))
像其他人提到的那样,您可以自己实现一个ForEach()
扩展方法,但它不存在的原因是有原因的:
请查看Eric博客文章。
List<MyObject> objects = new List<MyObject>();
// Populate list.
objects.ForEach(obj => {
obj.v1 += obj.dv1;
obj.v2 += obj.dv2;
});
list.Select( obj => new MyObject(obj.v1 + obj.dv1, obj.dv1, obj.v2 + obj.dv2, obj.dv2))
但请注意,返回值是一个新列表;原始列表的元素不会被修改。无副作用/状态变化。 如果这是您的目标,请选择select;否则,请像其他人建议的那样使用for / for-each。
我认为这不是linq的典型任务,但如果您想要,您可以这样做:
List<MyClass> objects = GetMyClasses();
Func<Action<MyClas>s, bool> do = (action) => { action(); return true; }
(from o in objects
where do( o, b=> { b.v1 += b.dv1; b.v2 += b.dv2; } )
select o).ToArray();