有一个 Pex4Fun 问题要求用户编写代码来计算数组的总和。
using System;
using System.Linq;
public class Program {
public static int Puzzle(int[] a) {
return a.Sum();
}
}
Pex 期望它可以通过 {-1840512878, -2147418112} 并取回下溢的数字 307036306,但是 LINQ 方法 Array.Sum() 会检查溢出。
我不能在 a.Sum() 的方法调用周围使用 unchecked 关键字,因为添加发生在方法内部。
有什么方法可以禁用 Array.Sum() 的下溢/溢出检查吗?
最佳答案
所有 Enumerable.Sum()
的规范如果发生溢出,重载将抛出 OverflowException
。这是不可配置的,这是设计使然。只是不要使用该方法。
您仍然可以在这里使用 LINQ 并使用 Enumerable.Aggregate()
方法而不是进行检查:
public static int Puzzle(int[] a)
{
return a.Aggregate((sum, i) => unchecked(sum + i));
}
否则手工完成。
关于c# - 使用 Array.Sum 禁用溢出检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8723339/