using System.Collections.Generic;
public static void Main()
var list = new List<decimal?>(){null, null};
Console.WriteLine("list sum is:" + list.Sum());
Console.WriteLine("list sum is:" + list.SumOrNull());
List<Package> packages = new List<Package>{new Package{Company = "Coho Vineyard", Weight = 25.2m}, new Package{Company = "Lucerne Publishing", Weight = 18.7m}, new Package{Company = "Wingtip Toys", Weight = 6.0m}, new Package{Company = "Adventure Works", Weight = 33.8m}};
Console.WriteLine("The Sum weight of the packages is: {0}", packages.Sum(pkg => pkg.Weight));
Console.WriteLine("The SumOrNull weight of the packages is: {0}", packages.SumOrNull(pkg => pkg.Weight));
public string Company { get; set; }
public decimal? Weight { get; set; }
public static class LinqExtensions
public static decimal? SumOrNull(this IEnumerable<decimal?> source)
var list = source.ToList();
return list.Any(t => t != null) ? list.Sum() : null;
public static decimal? SumOrNull<TSource>(this IEnumerable<TSource> source, Func<TSource, decimal?> func)
var list = source.Select(func).ToList();
return list.Any(t => t != null) ? list.Sum() : null;