问题描述
我的代码实际上是有效的,并以三种不同的方式进行了测试,但我很想知道实现它的最佳方式是什么。
有一个带有集合的 Vehicle.cs 类,想计算所有条目的平均消耗量。
这有效:
public ICollection<FuelingEntry> FuelingEntries { get; set; }
public double TotalAverageConsumption
{
get
{
double fuelingEntriesQuantitySum = 0;
double fuelingEntriesTripodometerSum = 0;
foreach (var fuelingEntry in FuelingEntries)
{
fuelingEntriesQuantitySum += fuelingEntry.Quantity;
fuelingEntriesTripodometerSum += fuelingEntry.Tripodometer;
}
return (fuelingEntriesQuantitySum / fuelingEntriesTripodometerSum) * 100;
}
}
还有“基本”LINQ:
public ICollection<FuelingEntry> FuelingEntries { get; set; }
public double TotalAverageConsumption
{
get
{
var fuelingEntriesQuantitySum = (from f in FuelingEntries select f.Quantity).Sum();
var fuelingEntriesTripodometerSum = (from f in FuelingEntries select f.Tripodometer).Sum();
// var fuelingEntriesQuantitySum = FuelingEntries.Select(f => f.Quantity).Sum();
// var fuelingEntriesTripodometerSum = FuelingEntries.Select(f => f.Tripodometer).Sum();
return (fuelingEntriesQuantitySum / fuelingEntriesTripodometerSum) * 100;
}
}
解决方法
正如所写的,带有 foreach
循环的第一个选项效率更高,因为您只需循环一次集合,而您的 linq 版本则循环两次。如果可以在访问属性时更新集合或集合项,这两种方法都将容易失败或出现奇怪的结果。