我只是想从我正在执行的特定自定义对象列表中添加值,如下所示:
{{1}}
有没有办法在没有foreach循环的情况下更快地完成这项工作?我几乎可以肯定linq应该能够快速完成这项任务,但我似乎无法找到如何做到这一点。
答案 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;