Всякий раз, когда вы выделяете новый массив в С# с помощью
new T[length]
для записей массива задано значение по умолчанию для T. Это null
для случая, когда T
является ссылочным типом или результатом конструктора по умолчанию T
, если T
- тип значения.
В моем случае я хочу инициализировать массив Int32
со значением -1:
var myArray = new int[100];
for (int i=0; i<myArray.Length; i++) { myArray[i] = -1; }
Итак, после того, как память зарезервирована для массива, CLR перебирает новую выделенную память и устанавливает все записи по умолчанию (int) = 0. После этого мой код устанавливает все записи в -1.
Это делает инициализацию избыточной. Описывает ли JIT это и пренебрегает инициализацией на 0, а если нет, существует ли способ напрямую инициализировать часть памяти с пользовательским значением?
Ссылаясь на инициализацию массива С# с значением, отличным от значения по умолчанию, использование Enumerable.Repeat(value, length).ToArray()
не является опцией, потому что Enumerable.ToArray
выделяет новый массив и копирует значения в это впоследствии.