代码之家  ›  专栏  ›  技术社区  ›  leora Matt Lacey

使用LINQ为集合中所有对象的属性赋值的最佳方法

  •  4
  • leora Matt Lacey  · 技术社区  · 14 年前

    我有一个 Car 对象与 ResaleValue

     IEnumerable<Car>
    

    我还有一个ResaleCalculator()和一个calculate方法。

    在linq中是否有方法应用计算并设置 零售价 集合中没有循环的每个对象的属性?

    3 回复  |  直到 14 年前
        1
  •  14
  •   Anthony Pegram    14 年前

    你真的不想用LINQ来做这个。首先,你不是在回避一个循环,你只是在抽象它。其次,LINQ方法旨在过滤和/或投影序列,而不是对其进行变异。当你可以使用 .ForEach List<T> 要不显式地编写循环,很难比简单地编写循环以执行所需的操作更清楚。

        2
  •  2
  •   Iain    14 年前

    cars.Select(c=>c.ResaleValue = c.Calculate());
    
        3
  •  1
  •   Ahmad Mageed    14 年前

    不能修改 IEnumerable<T> ResaleValue 属性和对现有属性的复制。理想情况下,当你第一次得到 IEnumerable<Car> .

    IEnumerable<Car> cars = // however you set cars originally
    cars = cars.Select(c => new Car
                {
                    Prop1 = c.Prop1,
                    Prop2 = c.Prop2,
                    ResaleValue = ResaleCalculator(params)
                 });
    

    显然这并不理想。另一方面,你可以 ToList() ForEach 方法或规则 foreach

    var list = cars.ToList()
                   .ForEach(c => c.ResaleValue = ResaleCalculator(c.SomeNeededParam));