こんにちは、Enumerable.Sum()LINQ の拡張メソッドを使用してハッシュ コードを計算しOverflowExceptionsていますが、コードが大きくなると問題が発生します。呼び出しをブロックに入れようとしましたuncheckedが、それは役に立たなかったようです。
メソッドのMSDNドキュメントには、値が大きくなりすぎるとスローされると書かれていますが、リフレクターをチェックインしたところ、これだけです:
public static int Sum(this IEnumerable<int> source) {
if (source == null) {
throw Error.ArgumentNull("source");
}
int num = 0;
foreach (int num2 in source) {
num += num2;
}
return num;
}
この逆コンパイルに基づいて、呼び出し元のコードのコンテキストに応じて、オーバーフローするかどうかが予想されます。オーバーフローするのはなぜですか? また、どうすればオーバーフローを止めることができますか?