禁用使用Array.Sum检查溢出

Jar*_*red 5 c# linq overflow

有一个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)

否则手动完成.