我有一组对象,其中一个对象有一些字段。我需要格式化集合中的一个字段,并且仍然保持集合的完整性。
例如,我有一个汽车列表var myCars = new List<Car>();
,在该汽车列表中,我想通过调用一个ChangeColor(string color)
方法将所有颜色字段从黑色更改为白色。我可以在一行中执行此操作,还是需要创建一个新列表并在循环中一一分配字段并在该循环中调用更改颜色方法?
我想看看是否有“单线”
提前致谢。
使用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 总是返回新集合,它不会修改您正在操作的集合。这是一个问题,因为您需要更改颜色并返回 Car 以在 LINQ 中执行此操作,但它不能那样工作。相反,您只需要执行 foreach 就可以在这里一行完成;
foreach(var car in myCars) car.ChangeColor(newColor);
其实,我一开始说的不是真的。你可以做到,它只是丑陋,比非 LINQ 解决方案丑得多,而且还产生了一个全新的集合。但是你可以做到;
var newColoredCars = myCars.Select(x => { x.ChangeColor(newColor); return x; } );
但是,这非常难以阅读,并且会修改您现有的集合并返回一个新集合,这是您在这里可以做的最糟糕的事情;修改您的原始集合,然后复制它,这样您就不会保留原始集合并使用两倍的内存!