var totalCost = Persons.Sum(x => BigInteger.Parse(x.cost.First(kv => kv.Key == "volvo").Value))
错误:
无法将lambda表达式转换为委托类型“System.Func< Persons,int >
”
因为块中的某些返回类型不能隐式转换为委托返回类型
无法将“System.Numerics.BigInteger
”类型隐式转换为“int
”。
存在显式转换(您是否错过了演员?)
我已将它与OrderByDescending
一起使用,它运行正常。我能理解错误。我只是不知道要替换Sum
以使其工作。
如何正确使用BigInteger
该声明?
答案 0 :(得分:5)
基本上,Sum
方法的重载在.NET 4.0中不适用于BigInteger
。您可以编写一个自己执行此操作的重载,或使用更通用的Aggregate
运算符进行求和:
var totalCost = Persons.Select(x => BigInteger.Parse(x.cost.First(kv => kv.Key == "volvo").Value))
.Aggregate(BigInteger.Zero, (sum, next) => sum + next);
答案 1 :(得分:2)
不幸的是,你做不到。 Sum
的重载不会超过BigInteger
,因此您必须自己进行求和。
您总是可以编写自己的扩展方法:
public static class EnumerableExtension
{
public static BigInteger Sum<TSource>(this IEnumerable<TSource> source, Func<TSource, BigInteger> selector)
{
BigInteger output = 0;
foreach(TSource item in source)
{
output += selector(item);
}
return output;
}
}
只要此类位于您的using
个名称空间中,您就可以按照要求拨打Sum
。
答案 2 :(得分:1)
您可以使用Aggregate。
//written without an IDE...
var bigIntegerSum = Persons.Aggregate( (sum, next) => sum + next);
答案 3 :(得分:0)
基于你的变量被称为“totalCost”的事实,我猜你正在处理钱,在这种情况下decimal
是比BigInteger
更好的类型。由于decimal
对Sum
有重载,因此如果使用:
var totalCost = Persons.Sum(x =>
Decimal.Parse(x.cost.First(kv => kv.Key == "volvo").Value))