Direkte Array-Initialisierung mit einem konstanten Wert

Direkte Array-Initialisierung mit einem konstanten Wert

Ähnlich wie Dans Antwort, aber ohne die Notwendigkeit, Sammlungen zu verwenden:

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

Es ist nicht überflüssig.

Angenommen, während Ihrer Initialisierungsschleife wird eine Ausnahme ausgelöst. Wenn die CLR den Speicher nicht zuerst gelöscht hat, können Sie möglicherweise den ursprünglichen nicht initialisierten Speicher "sehen", was insbesondere aus Sicherheitsgründen eine sehr schlechte Idee ist. Aus diesem Grund garantiert die CLR, dass jeder neu zugewiesene Speicher auf ein 0-Bit-Muster gelöscht wird.

Das gleiche Argument gilt übrigens auch für Felder in einem Objekt.

Ich nehme an, in beiden Fällen könnte die CLR prüfen, ob Sie das Array nicht an anderer Stelle sichtbar machen, bevor Sie die Initialisierung beenden, aber es ist eine komplizierte Prüfung, um ein ziemlich einfaches "Löschen dieses Speicherbereichs" zu vermeiden.


Wenn Sie Arrays kaufen, die als etwas schädlich angesehen werden, wäre Ihre Frage strittig, da Sie schreiben würden:

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