LINQ求和和和手动添加整数值的不同行为

本文关键字:整数 求和 添加 LINQ | 更新日期: 2023-09-27 17:58:41

的不同行为可能是什么原因

int temp = 2147483647;
Console.WriteLine(temp + 1); //returns -2147483648 
List<int> ltemp = new List<int>() { 2147483647, 1 };
Console.WriteLine(ltemp.Sum()); //returns OverFlowException

LINQ求和和和手动添加整数值的不同行为

Enumerable.Sum是用checked关键字计算和来实现的。

检查(C#参考)

checked关键字用于显式启用的溢出检查积分型算术运算和转换。

它使用以下代码-源代码参考-Microsoft:

public static int Sum(this IEnumerable<int> source) {
    if (source == null) throw Error.ArgumentNull("source");
    int sum = 0;
    checked {
        foreach (int v in source) sum += v;
    }
    return sum;
}

如果你对也这样做

checked
{
    int temp = 2147483647;
    Console.WriteLine(temp + 1); //returns -2147483648
}

您将得到相同的异常