こんにちは、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;
}
この逆コンパイルに基づいて、呼び出し元のコードのコンテキストに応じて、オーバーフローするかどうかが予想されます。オーバーフローするのはなぜですか? また、どうすればオーバーフローを止めることができますか?