Однією із задач рішення для циклу for циклу вище є те, що для наступного вхідного масиву з усіма позитивними значеннями результат підсумку від'ємний:
int[] arr = new int[] { Int32.MaxValue, 1 };
int sum = 0;
for (int i = 0; i < arr.Length; i++)
{
sum += arr[i];
}
Console.WriteLine(sum);
Сума становить -2147483648, оскільки позитивний результат занадто великий для типу даних int і переливається в негативне значення.
Для того ж вхідного масиву пропозиції arr.Sum () викликають викид виключення переповнення.
Більш надійним рішенням є використання більшого типу даних, такого як "довгий" у цьому випадку, для "суми" наступним чином:
int[] arr = new int[] { Int32.MaxValue, 1 };
long sum = 0;
for (int i = 0; i < arr.Length; i++)
{
sum += arr[i];
}
Це ж вдосконалення працює для підсумовування інших цілих типів даних, таких як короткий та sbyte. Для масивів непідписаних цілих типів даних, таких як uint, ushort та byte, використовуючи неподписаний довгий (ulong) для суми, уникає виключення переповнення.
Рішення for циклу також у багато разів швидше, ніж Linq .Sum ()
Щоб запустити ще швидше, пакет нугетів HPCsharp реалізує всі ці версії .Sum (), а також SIMD / SSE версії та багатоядерні паралельні, у багато разів більшу продуктивність.