Je me sens comme un idiot pour demander ceci mais je ne peux pas pour la vie de moi comprendre pourquoi cette IndexOutOfRangeException se produit. (Je veux dire, je sais Pourquoi ça se passe, je ne sais pas ce qui est invalide au sujet de mon code) Vérifiez le code ci-dessous pour savoir où l'erreur est jeté:Pourquoi ce tableau int lance-t-il une exception IndexOutOfRangeException?
public int[, ,] FindTablePairings(System.Text.RegularExpressions.MatchCollection mcBegin, System.Text.RegularExpressions.MatchCollection mcEnd)
{
int[,,] intTablePairs = new int[mcBegin.Count, 1, 1];
int[] intBegin = new int[mcBegin.Count];
int[] intEnd = new int[mcBegin.Count];
for (int q = 0; q < mcBegin.Count; q++)
{
intBegin[q] = mcBegin[q].Index;
}
for (int q = 0; q < mcEnd.Count; q++)
{
intEnd[q] = mcEnd[q].Index;
}
int intBeginCount = mcBegin.Count;
int intEndCount = mcEnd.Count;
int i = 0;
int j = 0;
int k = 0;
while (i < intBeginCount)
{
j = i;
while (j < intEndCount)
{
if (intBegin[i + 1] < intEnd[j])
{
j++;
}
else
{
intTablePairs[i, 0, 0] = intBegin[i];
intTablePairs[i, 1, 0] = intEnd[j];
intEnd[j] = -1; //EXCEPTION OCCURS HERE
break;
}
}
if (j == intEndCount)
{
intTablePairs[i, 0, 0] = intBegin[i];
intTablePairs[i, 1, 0] = intEnd[j - 1];
intEndCount--;
}
while (k < intEndCount)
{
if (intEnd[k] == -1)
{
k++;
}
else
{
intTablePairs[i,0,0] = intBegin[i];
intTablePairs[i,1,0] = intEnd[k];
intEnd[k] = -1;
k=0;
break;
}
}
}
return intTablePairs;
}
Le code est simplement regarder index de caractères des occurrences des balises de début et des balises de fin. Rien de très compliqué ... mais le pire est que l'exception est lancée à intEnd[j] = -1;
, et dans le débogueur, avant que cette instruction soit exécutée, tous les tableaux et MatchCollections sont correctement initialisés et remplis, y compris intEnd[]
! J'ai débogué pour m'assurer que le tableau existe et est initialisé, et j'ai également nettoyé la solution et l'ai reconstruite.
Quelqu'un a des suggestions sur ce qui se passe ici?
Il semble qu'une erreur se produit sur la ligne 'intEnd [j] = -1'. –
@ AS-CII qui ne peut pas être une erreur, sinon la ligne directement au-dessus serait également erronée. Les deux accèdent 'intEnd [j]'. – JaredPar
Je n'ai pas écrit votre solution était erronée;) Je pensais qu'il avait fait une erreur en copiant son code dans StackOverflow. –