Je reçois une des erreurs suivantes:
Qu'est-ce que cela signifie et comment puis-je résoudre ce problème?
Voir aussi
IndexOutOfRangeException
ArgumentOutOfRangeException
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.
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
parce que 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 désormais hors de portée lors de 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.
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 foreach
, en é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.