【发布时间】:2021-04-05 14:06:19
【问题描述】:
事实上,我的代码正在运行,并以三种不同的方式进行了测试,但我很想知道实现它的最佳方式是什么。
有一个带有集合的 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;
}
}
哪种方法最好还是有其他方法?
【问题讨论】:
-
LINQ 版本是两个循环,而
foreach是一个循环。但是,LINQ 版本可以简化为一个语句,但无论您做什么,这更像是一个偏好问题。 -
在 Visual Studio 中使用 profiler,可以更好地了解应该优化什么。
标签: c# performance linq foreach