计算通用列表中所有属性的值

时间:2015-10-29 08:18:25

标签: c# linq list

我只是想从我正在执行的特定自定义对象列表中添加值,如下所示:

{{1}}

有没有办法在没有foreach循环的情况下更快地完成这项工作?我几乎可以肯定linq应该能够快速完成这项任务,但我似乎无法找到如何做到这一点。

2 个答案:

答案 0 :(得分:7)

你总是可以这样做:

var sum = this.Chances.Sum(c => c.Value);

这是更短更清晰的编码器。但是,性能方面,foreach可能同样快,甚至更快。

但请注意,Sum的实施使用了checked mode,这也会影响性能,因此如果您的代码非常重要,foreach肯定会更快。< / p>

但是,如果Chance类似于

,我们正在谈论非常快的代码
class Chance {
    public long Value {get; set;}
}

我们有1000万件物品的清单

var chances = Enumerable.Range(0, 10000000).Select(i => new Chance{Value = i});

在我的机器上,我foreach获得780毫秒,Sum获得1030毫秒。因此,如果您的代码无法接近百万范围,那么您将使用Sum进行设置,因为代码更加明显。

即。由于您的方法名为CountChances,因此支持开发人员可能会误认为它的功能正常,因为一眼就看出它实际上总结了机会并不明显。使用Sum方法没有这种机会。

答案 1 :(得分:5)

你可以这样做:

this.Chances.Sum(e => e.Value);

只需加入:

using System.Linq;