微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

计算计算属性的最佳方法 - Linq 或 foreach 循环?

如何解决计算计算属性的最佳方法 - Linq 或 foreach 循环?

我的代码实际上是有效的,并以三种不同的方式进行了测试,但我很想知道实现它的最佳方式是什么。

一个带有集合的 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 版本则循环两次。如果可以在访问属性时更新集合或集合项,这两种方法都将容易失败或出现奇怪的结果。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。