C# List Sum()抛出OverflowException算术溢出问题求助
解决Linq Sum时的OverflowException问题
修正后的代码
long teste = joinHhResWithMemRes.Where(x => x.OcupacaoCode == 1).Sum(x => (long)x.Weight);
问题原因
你的Weight字段应该是int类型,调用Sum(x => x.Weight)时,Linq会默认使用针对int的Sum重载——这个重载内部用int类型累加,而你要计算的总和(46219134368)远超过int的最大值(2147483647),累加过程中直接触发溢出,后续再转long已经无法挽回。
关键说明
不管你最终要转成long、decimal还是其他类型,必须先将单个元素的Weight转换为大数值类型,再执行Sum,这样Linq会匹配对应的重载,用大类型完成累加,避免中途溢出。比如用decimal的话:
decimal teste = joinHhResWithMemRes.Where(x => x.OcupacaoCode == 1).Sum(x => (decimal)x.Weight);
内容的提问来源于stack exchange,提问作者racl
相关产品推荐
相关产品推荐

