SUM基于IEnumerable vb.net中的特定项

时间:2015-08-05 16:40:52

标签: vb.net

我有一个IEnumerable对象列表...每个对象都有许多属性,其中一个被称为:

Amount

金额是一个整数值。

我需要得到所有金额的总和。

我一直在迭代它们这样做:

For each item As MyObject In something
    amount += item.Amount
Next item

我很好奇是否有一种方法我可以在此处使用函数来获得SUM,但只有这是一个性能增益...就像一个内衬,这更有效?

3 个答案:

答案 0 :(得分:1)

由于您的要求,更简洁的解决方案是

Dim amount = something.Sum(Function(s) s.Amount)

但这可能比foreach循环慢。如果你有一个List而不是任何旧的IEnumerable,那么带有显式索引的for循环可能比你的foreach快一点:

For i = 0 to something.Count - 1
    amount += something(i).Amount
Next

答案 1 :(得分:1)

我相信VB中的语法是

amount = something.Sum(Function (item) item.Amount)

Sum函数是Linq的一部分,Function (item as MyObject) item.Amount)语法是Lambda expressionSum函数接受一个委托,它将在每个对象上执行以获取数值,然后它将对这些值求和并返回它们。

(您的源文件中可能需要Imports System.Linq。)

答案 2 :(得分:0)

因为您使用了setContentView()),所以我更喜欢IEnumerable(Of YourObject)foreach而不是LINQ循环。

For是Lazy集合,只会在您每次调用时执行 因此,在IEnumerable循环中,它将执行两次:Forsomething.Count,当foreach和something(i)只执行一次时

使用LINQ

foreach

或扩展方法Dim mySum As Int32 For Each item As YourItem in something mySum += item.Amount Next

Sum