Lambda表达式用于处理集合中的单个字段

时间:2013-07-16 17:29:45

标签: c# lambda

我有一个对象集合,其中一个对象有一些字段。我需要格式化集合中的一个字段,并仍然保持集合的完整性。

比方说我有一个汽车列表var myCars = new List<Car>();,在汽车列表中我想通过调用ChangeColor(string color)方法将所有颜色字段从黑色更改为白色。 我可以在一行中执行此操作,还是需要创建一个新的List并在循环中逐个分配字段并在该循环中调用change color方法?

我想知道是否有'一线'

提前致谢。

4 个答案:

答案 0 :(得分:3)

使用foreach循环或List(T).ForEach方法。

myCars.ForEach(c => c.ChangeColor(newColor));

答案 1 :(得分:2)

您应该使用foreach循环为集合中的每个值执行某些操作:

foreach(var car in myCars) car.ChangeColor(newColor);

答案 2 :(得分:1)

不要使用Linq来修改集合,而是使用简单的循环:

foreach(Car car in myCars)
    car.Color = color;

答案 3 :(得分:1)

没有。 LINQ始终返回新集合,它不会修改您正在操作的集合。这是一个问题,因为您需要更改颜色并返回Car以在LINQ中执行它并且它不会以这种方式工作。相反,你只需要做foreach,这可以在一行中完成;

 foreach(var car in myCars) car.ChangeColor(newColor);

实际上,我刚开始说的并不是真的。你可以做到,它只是丑陋,比非LINQ解决方案更丑陋,并且还产生了一个全新的集合。但你可以这样做;

   var newColoredCars = myCars.Select(x => { x.ChangeColor(newColor); return x; } );

然而,这是非常难以理解的,并修改了您现有的收藏品并返回了一个新的收藏品,这是您可以在这里做的最糟糕的事情;修改你的原始收藏然后复制它,这样你就不会保留原版并使用两倍的内存!