Lambda表达式来操作集合中的单个字段

本文关键字:单个 字段 集合 表达式 操作 Lambda | 更新日期: 2023-09-27 18:22:44

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

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

我想看看是否有"单行"

提前谢谢。

Lambda表达式来操作集合中的单个字段

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

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

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

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

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

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

没有。LINQ总是返回新的集合,它不会修改您正在操作的集合。这是一个问题,因为您需要更改颜色并返回一辆车才能在LINQ中执行此操作,但它就是不起作用。相反,你只需要做前臂,这可以在这里的一行中完成;

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

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

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

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