Un problema con las soluciones de bucle for anteriores es que para la siguiente matriz de entrada con todos los valores positivos, el resultado de la suma es 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 suma es -2147483648, ya que el resultado positivo es demasiado grande para el tipo de datos int y se desborda en un valor negativo.
Para la misma matriz de entrada, las sugerencias arr.Sum () provocan que se lance una excepción de desbordamiento.
Una solución más sólida es utilizar un tipo de datos más grande, como un "largo" en este caso, para la "suma" de la siguiente manera:
int[] arr = new int[] { Int32.MaxValue, 1 };
long sum = 0;
for (int i = 0; i < arr.Length; i++)
{
sum += arr[i];
}
La misma mejora funciona para la suma de otros tipos de datos enteros, como short y sbyte. Para matrices de tipos de datos enteros sin signo como uint, ushort y byte, el uso de unsigned long (ulong) para la suma evita la excepción de desbordamiento.
La solución de bucle for también es muchas veces más rápida que Linq .Sum ()
Para ejecutarse aún más rápido, el paquete HPCsharp nuget implementa todas estas versiones .Sum (), así como las versiones SIMD / SSE y las paralelas multinúcleo, para un rendimiento mucho más rápido.