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

Vin*_*ent 0 c# linq list

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

private int CountChances()
{
    int totalChance = 0;
    foreach(var chance in this.Chances)
    {
       totalChance += chance.Value;
    }
    return totalChance;
}
Run Code Online (Sandbox Code Playgroud)

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

SWe*_*eko 7

你可以随时做:

var sum = this.Chances.Sum(c => c.Value);
Run Code Online (Sandbox Code Playgroud)

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

但请注意,Sum使用checked模式的实现也会影响性能,因此如果您的代码非常关键,那么foreach肯定会更快.

但是,我们正在谈论非常快速的代码,如果Chance是这样的话

class Chance {
    public long Value {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

我们有1000万件物品清单

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

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

即,因为你的方法被命名CountChances,支持开发人员可能会误认为它的功能,因为一眼就看出它实际上总结机会并不明显.这种Sum方法没有这样的机会.


Ale*_*ksa 5

你可以这样做:

this.Chances.Sum(e => e.Value);
Run Code Online (Sandbox Code Playgroud)

只需包括:

using System.Linq;
Run Code Online (Sandbox Code Playgroud)