c# - 使用 Array.Sum 禁用溢出检查

标签 c# linq overflow

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

相关文章:

c# - ClickOnce 部署恐怖

c# - 我编写的函数中出现奇怪的空引用异常

css - 滑动选项卡的背景在滚动/溢出部分消失

css - 溢出允许水平滚动

c# - 如何在 C# 中从数据库检索时将 varBinary 转换为图像或视频

html - 将特定属性传递给选定的子项

c# - 是否可以将数学运算 (+) 存储在变量中并调用该变量,就像直接使用运算本身一样

c# - 在 asp.net 上的 sql server 中插入空值,并提供必填字段验证器

c# - 像引用类型一样修改 IQueryable 不起作用?

c# - LINQ 平均时间跨度?