Каждый раз, когда вы выделяете новый массив в C # с помощью
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, и если нет, есть ли способ напрямую инициализировать часть памяти с пользовательским значением?
Ссылаясь на Инициализация массива C # - со значением, отличным от значения по умолчанию , использование Enumerable.Repeat(value, length).ToArray()
не вариант, поскольку Enumerable.ToArray
выделяет новый массив и копирует значения в него впоследствии.