这可能是造成这种不同行为的原因:
int temp = 2147483647;
Console.WriteLine(temp + 1); //returns -2147483648
List<int> ltemp = new List<int>() { 2147483647, 1 };
Console.WriteLine(ltemp.Sum()); //returns OverFlowException
答案 0 :(得分:6)
Enumerable.Sum
是通过使用checked
关键字计算总和来实现的。
checked关键字用于显式启用溢出检查 积分型算术运算和转换。
它使用以下代码 - Source Reference - 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
}
您将获得相同的异常