Inizializzazione diretta dell'array con un valore costante

Inizializzazione diretta dell'array con un valore costante

Simile alla risposta di Dan ma senza la necessità di utilizzare le raccolte:

int[] myArray = Enumerable.Repeat(-1, 100).ToArray();

Non è ridondante.

Supponiamo che venga generata un'eccezione durante il ciclo di inizializzazione. Se il CLR non ha prima cancellato la memoria, potresti essere in grado di "vedere" la memoria originale non inizializzata, il che è una pessima idea, in particolare dal punto di vista della sicurezza. Ecco perché il CLR garantisce che tutta la memoria allocata di recente venga cancellata con uno schema a 0 bit.

Lo stesso argomento vale per i campi in un oggetto, a proposito.

Suppongo che in entrambi i casi il CLR potrebbe verificare che non hai intenzione di rendere visibile l'array altrove prima di terminare l'inizializzazione, ma è un controllo complicato per evitare un semplice "cancellare quest'area di memoria".


Se acquisti in Array considerati alquanto dannosi, la tua domanda sarebbe discutibile come scriveresti:

var myArray = new List<int>(Enumerable.Repeat(-1, 100));