Всякий раз, когда вы выделяете новый массив в C# сПрямая инициализация массива с постоянным значением
new T[length]
элементы массива установлены по умолчанию Т. То есть null
для случая, когда T
является ссылочным типом или результат конструктора по умолчанию T
, если T
- тип значения.
В моем случае я хочу, чтобы инициализировать массив Int32
со значением -1:
var myArray = new int[100];
for (int i=0; i<myArray.Length; i++) { myArray[i] = -1; }
Так после того, как память зарезервирована для массива, CLR перебирает вновь выделенную память и устанавливает все записи в default (int) = 0. После этого мой код устанавливает все записи в -1.
Это делает инициализацию избыточной. Описывает ли JIT это и игнорирует инициализацию до 0, а если нет, есть ли способ непосредственно инициализировать часть памяти с помощью специального значения?
Ссылаясь на C# Array initialization - with non-default value, использование Enumerable.Repeat(value, length).ToArray()
не является опцией, так как Enumerable.ToArray
выделяет новый массив и затем копирует значения в него.
Если у вас есть байт массив, затем [P/Invoke может помочь] (http://stackoverflow.com/a/19060558/380331). Но если размер элемента массива больше байта (как в вашем случае) - этот метод не поможет. –