上記のforループソリューションの1つの問題は、次の入力配列がすべて正の値の場合、合計結果が負になることです。
int[] arr = new int[] { Int32.MaxValue, 1 };
int sum = 0;
for (int i = 0; i < arr.Length; i++)
{
sum += arr[i];
}
Console.WriteLine(sum);
正の結果はintデータ型には大きすぎて負の値にオーバーフローするため、合計は-2147483648です。
同じ入力配列の場合、arr.Sum()の提案により、オーバーフロー例外がスローされます。
より堅牢なソリューションは、次のように、「合計」にこの場合の「長い」などのより大きなデータ型を使用することです。
int[] arr = new int[] { Int32.MaxValue, 1 };
long sum = 0;
for (int i = 0; i < arr.Length; i++)
{
sum += arr[i];
}
同じ改善が、shortやsbyteなどの他の整数データ型の合計にも有効です。uint、ushort、byteなどの符号なし整数データ型の配列の場合、合計にunsigned long(ulong)を使用すると、オーバーフロー例外を回避できます。
forループソリューションは、Linq .Sum()よりも何倍も高速です。
さらに高速に実行するために、HPCsharp nugetパッケージは、これらすべての.Sum()バージョン、SIMD / SSEバージョン、およびマルチコアパラレルバージョンを実装しており、何倍も高速なパフォーマンスを実現します。