I have the following code:
List<Car> allCars = new List<Car>
{
new Car(1977, "Ford", "Pinto"),
new Car(1983, "Ford", "Taurus"),
new Car(1981, "Dodge", "Colt"),
new Car(1982, "Volkwagen", "Scirocco"),
new Car(1982, "Dodge", "Challenger")
};
Array.ForEach(allCars.ToArray(), Console.WriteLine);
// I want to do an "in-place" modification of an item in
// the list
var query = allCars.Select(x =>
{
if (x.Model == "Colt") return "Dart";
});
public class Car
{
public int Year { get; set; }
public string Make { get; set; }
public string Model { get; set; }
public Car(int year, string make, string model)
{
Year = year; Make = make; Model = model;
}
public override string ToString()
{
return string.Format("{0} - {1} {2}", Year, Make, Model);
}
}
Now I know that I can do this:
var query = allCars.Select(c => c.Model == "Colt");
Or this:
for (var item in allCars.Select(c => c.Model == "Colt"))
{
item.Model = "Dart";
}
Or this:
allCars.Single(c => c.Model == "Colt").Model = "Dart";
But how about modifying the item "in-place" in the list?
The last way I mentioned will work fine if I have one property to modify, but what if I have two?
LINQ is a querying language, it should keep the original collection immutable.
This is ok
foreach (var item in allCars.Where(c => c.Model == "Colt"))
{
item.Model = "Dart";
}
Please read this post on why it is not implemented in LINQ
foreach(var item in allCars.Where(c => c.Model == "Colt"))
{
item.Model = "Dart";
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With