Quando si assegna un nuovo array in C# coninizializzazione campo diretto con un valore costante
new T[length]
gli elementi dell'array sono impostati sul valore predefinito T. Cioè null
per il caso che T
è un tipo di riferimento o il risultato del costruttore predefinito di T
, se T
è un tipo di valore.
Nel mio caso voglio inizializzare un array Int32
con il valore -1:
var myArray = new int[100];
for (int i=0; i<myArray.Length; i++) { myArray[i] = -1; }
Così, dopo la memoria è riservata per la matrice, il CLR loop sopra la memoria appena allocata e imposta tutte le voci default (int) = 0. Dopodiché, il mio codice imposta tutte le voci su -1.
Ciò rende l'inizializzazione ridondante. Il JIT lo rileva e trascura l'inizializzazione a 0 e in caso contrario, c'è un modo per inizializzare direttamente una porzione di memoria con un valore personalizzato?
In riferimento a C# Array initialization - with non-default value, l'utilizzo di Enumerable.Repeat(value, length).ToArray()
non è un'opzione, poiché Enumerable.ToArray
alloca un nuovo array e copia i valori in esso successivamente.
Se si dispone di byte array, quindi [P/Invoke potrebbe aiutare] (http://stackoverflow.com/a/19060558/380331). Ma se la dimensione dell'elemento dell'array è maggiore del byte (come nel tuo caso), questo metodo non sarà di aiuto. –