diff options
author | Jb Evain <jbevain@gmail.com> | 2008-01-22 14:34:42 +0300 |
---|---|---|
committer | Jb Evain <jbevain@gmail.com> | 2008-01-22 14:34:42 +0300 |
commit | ee698320e58b973b217a35d1ac9cbfbe6dcbeaed (patch) | |
tree | b278bde00e4b241f328ca90a01d256dc2a242752 /mcs/class/System.Core/System.Linq/Enumerable.cs | |
parent | 17a15a354b52b8e84a78c94cf0ea557c545f916b (diff) |
add Sum checks
svn path=/trunk/mcs/; revision=93508
Diffstat (limited to 'mcs/class/System.Core/System.Linq/Enumerable.cs')
-rw-r--r-- | mcs/class/System.Core/System.Linq/Enumerable.cs | 52 |
1 files changed, 44 insertions, 8 deletions
diff --git a/mcs/class/System.Core/System.Linq/Enumerable.cs b/mcs/class/System.Core/System.Linq/Enumerable.cs index 698dd12b24f..f77f1ed7643 100644 --- a/mcs/class/System.Core/System.Linq/Enumerable.cs +++ b/mcs/class/System.Core/System.Linq/Enumerable.cs @@ -1920,21 +1920,29 @@ namespace System.Linq public static int Sum (this IEnumerable<int> source) { + Check.Source (source); + return Sum<int, int> (source, (a, b) => a + b); } public static int? Sum (this IEnumerable<int?> source) { + Check.Source (source); + return SumNullable<int?, int?> (source, (a, b) => a.HasValue ? a + b : a); } public static int Sum<TSource> (this IEnumerable<TSource> source, Func<TSource, int> selector) { + Check.SourceAndSelector (source, selector); + return Sum<TSource, int> (source, (a, b) => a + selector (b)); } public static int? Sum<TSource> (this IEnumerable<TSource> source, Func<TSource, int?> selector) { + Check.SourceAndSelector (source, selector); + return SumNullable<TSource, int?> (source, (a, b) => { var value = selector (b); return value.HasValue ? a + value.Value : a; @@ -1943,21 +1951,29 @@ namespace System.Linq public static long Sum (this IEnumerable<long> source) { + Check.Source (source); + return Sum<long, long> (source, (a, b) => a + b); } public static long? Sum (this IEnumerable<long?> source) { + Check.Source (source); + return SumNullable<long?, long?> (source, (a, b) => a.HasValue ? a + b : a); } public static long Sum<TSource> (this IEnumerable<TSource> source, Func<TSource, long> selector) { + Check.SourceAndSelector (source, selector); + return Sum<TSource, long> (source, (a, b) => a + selector (b)); } public static long? Sum<TSource> (this IEnumerable<TSource> source, Func<TSource, long?> selector) { + Check.SourceAndSelector (source, selector); + return SumNullable<TSource, long?> (source, (a, b) => { var value = selector (b); return value.HasValue ? a + value.Value : a; @@ -1966,21 +1982,29 @@ namespace System.Linq public static double Sum (this IEnumerable<double> source) { + Check.Source (source); + return Sum<double, double> (source, (a, b) => a + b); } public static double? Sum (this IEnumerable<double?> source) { + Check.Source (source); + return SumNullable<double?, double?> (source, (a, b) => a.HasValue ? a + b : a); } public static double Sum<TSource> (this IEnumerable<TSource> source, Func<TSource, double> selector) { + Check.SourceAndSelector (source, selector); + return Sum<TSource, double> (source, (a, b) => a + selector (b)); } public static double? Sum<TSource> (this IEnumerable<TSource> source, Func<TSource, double?> selector) { + Check.SourceAndSelector (source, selector); + return SumNullable<TSource, double?> (source, (a, b) => { var value = selector (b); return value.HasValue ? a + value.Value : a; @@ -1989,21 +2013,29 @@ namespace System.Linq public static float Sum (this IEnumerable<float> source) { + Check.Source (source); + return Sum<float, float> (source, (a, b) => a + b); } public static float? Sum (this IEnumerable<float?> source) { + Check.Source (source); + return SumNullable<float?, float?> (source, (a, b) => a.HasValue ? a + b : a); } public static float Sum<TSource> (this IEnumerable<TSource> source, Func<TSource, float> selector) { + Check.SourceAndSelector (source, selector); + return Sum<TSource, float> (source, (a, b) => a + selector (b)); } public static float? Sum<TSource> (this IEnumerable<TSource> source, Func<TSource, float?> selector) { + Check.SourceAndSelector (source, selector); + return SumNullable<TSource, float?> (source, (a, b) => { var value = selector (b); return value.HasValue ? a + value.Value : a; @@ -2012,35 +2044,41 @@ namespace System.Linq public static decimal Sum (this IEnumerable<decimal> source) { + Check.Source (source); + return Sum<decimal, decimal> (source, (a, b) => a + b); } public static decimal? Sum (this IEnumerable<decimal?> source) { + Check.Source (source); + return SumNullable<decimal?, decimal?> (source, (a, b) => a.HasValue ? a + b : a); } public static decimal Sum<TSource> (this IEnumerable<TSource> source, Func<TSource, decimal> selector) { + Check.SourceAndSelector (source, selector); + return Sum<TSource, decimal> (source, (a, b) => a + selector (b)); } public static decimal? Sum<TSource> (this IEnumerable<TSource> source, Func<TSource, decimal?> selector) { + Check.SourceAndSelector (source, selector); + return SumNullable<TSource, decimal?> (source, (a, b) => { var value = selector (b); return value.HasValue ? a + value.Value : a; }); } - static TR Sum<TA, TR> (this IEnumerable<TA> source, Func<TR, TA, TR> func) + static TR Sum<TA, TR> (this IEnumerable<TA> source, Func<TR, TA, TR> selector) { - Check.Source (source); - TR total = default (TR); int counter = 0; foreach (var element in source) { - total = func (total, element); + total = selector (total, element); ++counter; } @@ -2050,13 +2088,11 @@ namespace System.Linq return total; } - static TR SumNullable<TA, TR> (this IEnumerable<TA> source, Func<TR, TA, TR> func) + static TR SumNullable<TA, TR> (this IEnumerable<TA> source, Func<TR, TA, TR> selector) { - Check.Source (source); - TR total = default (TR); foreach (var element in source) { - total = func (total, element); + total = selector (total, element); } return total; |