Chaque fois que vous allouez un nouveau tableau en C# avecinitialisation du tableau direct avec une valeur constante
new T[length]
les entrées du tableau sont définis par défaut de T. C'est null
pour le cas où T
est un type de référence ou le résultat du constructeur par défaut de T
, si T
est un type de valeur.
Dans mon cas, je veux initialiser un tableau Int32
avec la valeur -1:
var myArray = new int[100];
for (int i=0; i<myArray.Length; i++) { myArray[i] = -1; }
Ainsi, après la mémoire est réservée au tableau, les boucles CLR sur la mémoire nouvellement allouée et définit toutes les entrées default (int) = 0. Après cela, mon code définit toutes les entrées à -1.
Cela rend l'initialisation redondante. Est-ce que le JIT détecte ceci et néglige l'initialisation à 0 et sinon, est-il possible d'initialiser directement une partie de la mémoire avec une valeur personnalisée? En se référant à C# Array initialization - with non-default value, l'utilisation de Enumerable.Repeat(value, length).ToArray()
n'est pas une option, car Enumerable.ToArray
alloue un nouveau tableau et lui copie les valeurs par la suite.
Si vous avez octet array, alors [P/Invoke pourrait aider] (http://stackoverflow.com/a/19060558/380331). Mais si la taille de l'élément de tableau est plus grande que l'octet (comme dans votre cas) - cette méthode n'aidera pas. –