使用 LINQ 更改集合中的项

  • 本文关键字:集合 LINQ 使用 c# linq
  • 更新时间 :
  • 英文 :


我有以下代码:

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);
    }
}

现在我知道我可以这样做:

var query = allCars.Select(c => c.Model == "Colt");

或者这个:

for (var item in allCars.Select(c => c.Model == "Colt"))
{
    item.Model = "Dart";
}

或者这个:

allCars.Single(c => c.Model == "Colt").Model = "Dart";

但是,如何修改列表中的"就地"项?

如果我有一个属性要修改,我提到的最后一种方法可以正常工作,但是如果我有两个属性怎么办?

LINQ 是一种查询语言,它应该保持原始集合不可变。

这没关系

foreach (var item in allCars.Where(c => c.Model == "Colt"))
{
    item.Model = "Dart";
}

请阅读这篇文章,了解为什么它没有在 LINQ 中实现

foreach(var item in allCars.Where(c => c.Model == "Colt"))
{
    item.Model = "Dart";
}

相关内容

  • 没有找到相关文章

最新更新