【问题标题】:Best way to calculate a calculated property - Linq or foreach loop? [closed]计算计算属性的最佳方法 - Linq 或 foreach 循环? [关闭]
【发布时间】: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


【解决方案1】:

foreach 循环的第一个选项更有效,因为您只需循环一次集合,您的 linq 版本循环两次。如果可以在您访问属性时更新集合或集合项,这两种方法都容易失败或出现奇怪的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 2017-10-06
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    相关资源
    最近更新 更多