Votre meilleur choix est d'utiliser quelque chose comme List
plutôt qu'un tableau. Mais si vous devez utiliser un tableau:
int[] arr1 = new int[200];
// initialiser le tableau
int[] arr2 = new int[]{999, 999, 999, 999, 999};
int targetPos = 20;
// redimensionne le tableau, en copiant les éléments
Array.Resize(ref arr1, arr1.Length + arr2.Length);
// déplace la fin du tableau vers le bas
Buffer.BlockCopy(arr1, 4*targetPos, arr1, 4*(targetPos+arr2.Length), 4*(arr1.Length - targetPos));
// copier arr2 à la bonne position
Buffer.BlockCopy(arr2, 0, 4*arr1.targetPos, 4*arr2.Length);
Il pourrait être plus rapide de créer un nouveau tableau et de copier les éléments, comme ceci.
int[] newArray = new int[arr1.Length + arr2.Length];
// copier la première partie du tableau original
Buffer.BlockCopy(arr1, 0, newArray, 0, 4*targetPos);
// copier le deuxième tableau
Buffer.BlockCopy(arr2, 0, newArray, 4*targetPos, 4*arr2.Length);
// copier le reste du tableau original
Buffer.BlockCopy(arr1, 4*targetPos, newArray, 4*(targetPos + arr2.Length), 4*(arr1.Length - targetPos));
// et remplacer le tableau original
arr1 = newArray;
La version la plus rapide dépendra de la valeur de targetPos
. La deuxième version sera plus rapide lorsque targetPos
est petite. Lorsque targetPos
est petit, la première version doit copier beaucoup de données deux fois. La deuxième version ne copie jamais plus qu'elle n'en a besoin.
BlockCopy
est un peu compliqué à utiliser car il nécessite des décalages en octets, c'est la raison de toutes les multiplications par quatre dans le code. Il serait peut-être préférable d'utiliser Array.Copy dans la deuxième version ci-dessus. Cela évitera d'avoir à multiplier tout par 4 (et d'oublier parfois).