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
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
}
您将得到相同的异常