有一个Pex4Fun问题,要求用户编写查找数组总和的代码.
using System;
using System.Linq;
public class Program {
public static int Puzzle(int[] a) {
return a.Sum();
}
}
Run Code Online (Sandbox Code Playgroud)
Pex期望它可以通过{-1840512878,-2147418112}并返回下溢数字307036306,但是LINQ方法Array.Sum()检查溢出.
我不能在a.Sum()的方法调用周围使用unchecked关键字,因为添加发生在方法内部.
有没有办法禁止使用Array.Sum()检查下溢/溢出?
Jef*_*ado 15
如果存在溢出,则所有Enumerable.Sum()重载的规范将抛出OverflowException.这是不可配置的,这是设计的.只是不要使用那种方法.
您仍然可以在这里使用LINQ并使用该Enumerable.Aggregate()方法而不进行检查:
public static int Puzzle(int[] a)
{
return a.Aggregate((sum, i) => unchecked(sum + i));
}
Run Code Online (Sandbox Code Playgroud)
否则手动完成.