我有一个对象集合,其中一个对象有一些字段。我需要格式化集合中的一个字段,并仍然保持集合的完整性。
比方说我有一个汽车列表var myCars = new List<Car>();
,在汽车列表中我想通过调用ChangeColor(string color)
方法将所有颜色字段从黑色更改为白色。
我可以在一行中执行此操作,还是需要创建一个新的List并在循环中逐个分配字段并在该循环中调用change color方法?
我想知道是否有'一线'
提前致谢。
答案 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; } );
然而,这是非常难以理解的,并修改了您现有的收藏品并返回了一个新的收藏品,这是您可以在这里做的最糟糕的事情;修改你的原始收藏然后复制它,这样你就不会保留原版并使用两倍的内存!