Cada vez que se asigna una nueva matriz en C# coninicialización de la matriz directa con un valor constante
new T[length]
las entradas de la matriz se establece en el valor por defecto de T. Es decir null
para el caso de que T
es un tipo de referencia o el resultado del constructor predeterminado de T
, si T
es un tipo de valor.
En mi caso quiero inicializar una matriz Int32
con el valor -1:
var myArray = new int[100];
for (int i=0; i<myArray.Length; i++) { myArray[i] = -1; }
Así que después de que la memoria se reserva para la matriz, el CLR bucles sobre la memoria recién asignada y establece que todas las entradas default (int) = 0. Después de eso, mi código establece todas las entradas en -1.
Eso hace que la inicialización sea redundante. ¿El JIT detecta esto y descuida la inicialización a 0 y, de no ser así, hay una forma de inicializar directamente una parte de la memoria con un valor personalizado?
Con referencia a C# Array initialization - with non-default value, usar Enumerable.Repeat(value, length).ToArray()
no es una opción, porque Enumerable.ToArray
asigna una nueva matriz y luego copia los valores a la misma.
Si usted tiene byte array, luego [P/Invoke podría ayudar] (http://stackoverflow.com/a/19060558/380331). Pero si el tamaño del elemento de matriz es mayor que el byte (como en su caso), este método no será de ayuda. –