/ / Qu'est-ce qu'une exception "index out of range" et comment la corriger? [dupliquer] - c #, .net, indexoutofrangeexception

Qu'est-ce qu'une exception "index out of range" et comment la corriger? [dupliquer] - c #, .net, indexoutofrangeexception

Je reçois une des erreurs suivantes:

  • "L'indice était en dehors des limites. Doit être non négatif et inférieur à la taille de la collection"
  • "L'indice d'insertion était hors limites. Doit être non négatif et de taille inférieure ou égale à la taille."
  • "L'index était en dehors des limites du tableau."

Qu'est-ce que cela signifie et comment puis-je résoudre le problème?

Voir également
IndexOutOfRangeException
ArgumentOutOfRangeException

Réponses:

33 pour la réponse № 1

Pourquoi cette erreur se produit?

Parce que vous avez essayé d’accéder à un élément d’une collection, utilisez un index numérique qui dépasse les limites de la collection.

Le premier élément d'une collection est généralement situé à l'index 0. Le dernier élément est à l'index n-1, où n est le Size de la collection (le nombre d'éléments qu'elle contient). Si vous essayez d’utiliser un nombre négatif comme index ou un nombre supérieur à Size-1, vous allez avoir une erreur.

Comment fonctionne l'indexation des tableaux

Lorsque vous déclarez un tableau comme ceci:

var array = new int[6]

Les premier et dernier éléments du tableau sont

var firstElement = array[0];
var lastElement = array[5];

Alors quand tu écris:

var element = array[5];

vous récupérez le sixième élément du tableau, pas le cinquième.

En règle générale, vous passez en boucle sur un tableau comme ceci:

for (int index = 0; index < array.Length; index++)
{
Console.WriteLine(array[index]);
}

Cela fonctionne car la boucle commence à zéro et se termine à Length-1 car index n'est plus inférieur à Length.

Ceci, cependant, jettera une exception:

for (int index = 0; index <= array.Length; index++)
{
Console.WriteLine(array[index]);
}

Remarquez le <= Là? index sera maintenant hors de portée dans la dernière itération de la boucle, car la boucle pense que Length est un index valide, mais ce n'est pas le cas.

Comment fonctionnent les autres collections

Les listes fonctionnent de la même manière, sauf que vous utilisez généralement Count au lieu de Length. Ils commencent toujours à zéro et se terminent à Count - 1.

for (int index = 0; i < list.Count; index++)
{
Console.WriteLine(list[index]);
}

Cependant, vous pouvez aussi parcourir une liste en utilisant foreachen évitant tout le problème de l'indexation:

foreach (var element in list)
{
Console.WriteLine(element.ToString());
}

Vous ne pouvez pas indexer un élément qui n’a pas encore été ajouté à une collection.

var list = new List<string>();
list.Add("Zero");
list.Add("One");
list.Add("Two");
Console.WriteLine(list[3]);  // Throws exception.