Un problema con le soluzioni del ciclo for sopra è che per il seguente array di input con tutti i valori positivi, il risultato della somma è negativo:
int[] arr = new int[] { Int32.MaxValue, 1 };
int sum = 0;
for (int i = 0; i < arr.Length; i++)
{
sum += arr[i];
}
Console.WriteLine(sum);
La somma è -2147483648, poiché il risultato positivo è troppo grande per il tipo di dati int e supera un valore negativo.
Per lo stesso array di input, i suggerimenti arr.Sum () causano la generazione di un'eccezione di overflow.
Una soluzione più robusta consiste nell'utilizzare un tipo di dati più grande, ad esempio "lungo" in questo caso, per la "somma" come segue:
int[] arr = new int[] { Int32.MaxValue, 1 };
long sum = 0;
for (int i = 0; i < arr.Length; i++)
{
sum += arr[i];
}
Lo stesso miglioramento funziona per la somma di altri tipi di dati interi, come short e sbyte. Per array di tipi di dati interi senza segno come uint, ushort e byte, l'utilizzo di un lungo senza segno (ulong) per la somma evita l'eccezione di overflow.
La soluzione del ciclo for è anche molte volte più veloce di Linq .Sum ()
Per funzionare ancora più velocemente, il pacchetto HPCsharp nuget implementa tutte queste versioni .Sum () così come le versioni SIMD / SSE e parallele multi-core, per prestazioni molte volte più veloci.