我看了遍,但不能想出解决办法。 你如何总结BigIntegers的名单?
Using System.Numerics;
Using System.Linq;
List<BigInteger> bigInts = new List<BigInteger>();
BigInteger sum = bigInts.Sum(); // doesn't work
BigInteger sum = bigInts.Sum<BigInteger>(); // doesn't work
BigInteger sum = bigInts.Sum(x => x); // doesn't work
你有没有这样做呢?
BigInteger sum = new BigInteger(0);
foreach(BigInteger bigint in bigInts)
sum += bigint;
聚合函数总和的更一般的版本:
var bigInts = new List<System.Numerics.BigInteger>();
bigInts.Add(new System.Numerics.BigInteger(1));
var result = bigInts.Aggregate((currentSum, item)=> currentSum + item));
var sum = bigInts.Aggregate(BigInteger.Add);
聚合得到的委托,向四周两个BigInteger,并返回一个BigInteger的方法。 它使用一个默认的BigInteger作为初始值(0),并且将详细说明每BigInteger,以调用BigInteger.Add与前一结果(0将是先前结果在第一时间 - 也被称为“种子”)和当前元素。
您也可以使用forEach()这样的泛型列表的方法做加法:
var bigInts = new List<BigInteger>();
BigInteger sum = 0;
bigInts.ForEach(x => sum += x);
正如阿列克谢说骨料是总和的比较一般。 下面介绍的是一个扩展方法。
public BigInteger static Sum(IEnumerable<BigInteger> this lst)
{
return lst.Aggregate(BigInteger.Zero, (acc, next)=> acc.Add(next));
}
我没有测试此,我的C#可能会得到一个有点生疏。 但这个想法应该是声音:看http://msdn.microsoft.com/en-us/library/bb549218.aspx#Y0