今天,我们将着眼于五个用于序列的聚合运算。很多时候当我们在对序列进行操作时,我们想要做基于这些序列执行某种汇总然后,计算结果。
Enumerable 静态类的LINQ扩展方法可以做到这一点 。就像之前大多数的LINQ扩展方法一样,这些是基于IEnumerable <TSource>序列的操作。
SUM() - 计算整个序列的总和
它有两种形式:
- SUM( )
- 计算整个序列的总值。
- 源类型必须是以下类型之一: int,long,double,decimal,single 或这些类型的可空变种(int?, long?, double?…) 。
- Sum(Func<TSource, X> projection)
- 计算序列投影值的和。
- 从MSDN上,我们得知X必须是以下类型之一:int,long,double,decimal,single 或这些类型的可空变种(int?, long?, double?…) 。
在这里请注意几件事情。
首先,尽管在C#中支持许多类型,SUM()方法-非投影式-只支持int,long,double,decimal,single 。
1: // 正确
2: double[] data = { 3.14, 2.72, 1.99, 2.32 };
3: var result = data.Sum();
4:
5: //不支持
6: short[] shortData = { 1, 2, 5, 7 };
7:
8: // 出现编辑错误
9: var shortResult = shortData.Sum();
还要注意的是,你可以操作上面这些类型允许Null 的可空值变种。在之前我们讨论过,可为空的类型可以是一个棘手的事情,但用SUM()时我们不用担心,因为所有的空值在求和时都排除了 :
var data = new List<int?> { 1, 3, 9, 13, null, 7, 12, null };
var result = data.Sum();