2016-04-06 3 views
0

Ich erhalte IndexOutOfRangeException nach dem Erstellen dieser Bereichsmethode in C#. Ich bin mir wirklich nicht sicher, was ich falsch mache.IndexOutOfRangeException nach dem Erstellen dieser Methode in C#

private string RangeMatch(char lastnameLetter, char[] letterLimits, string[] times) 
{ 
    string regTime; 
    int index = letterLimits.Length - 1; 

    while (index >= 0 && lastnameLetter < letterLimits[index]) 
      --index; 

    regTime = times[index]; 
    return regTime; 
} 
+0

dementsprechend die Ausnahme und Debug-Lesen. – John3136

+0

Ich glaube, Sie wollen 'while (index> 0 & & ...'; verwenden, wenn Sie erlauben, dass' index' in dieser Bedingung Null erreicht, und _den_index dann noch einmal dekrementiert, erhalten Sie einen 'Index'-Wert von -1. – Castaglia

+0

Wenn ich den Index auf> 0 setze, gibt die Methode nur das letzte Element des Times-Arrays zurück - egal, welches char für den lastnameLetter angegeben ist. – bloop

Antwort

1

Sie müssen den Array-Index mit nicht-negativ, Integer, Nummer zuweisen.

Ihre letzte Aussage vor return:

while (index >= 0 && lastnameLetter < letterLimits[index]) 
     --index; 

Dies geschieht, wenn index >= 0 und lastnameLetter < letterLimits[index] bis zum Ende (perfekt):

regTime = times[index]; 

index Wert von -1 aufgrund der vorherigen while-Schleife haben .

Ein Fix wäre return null, wenn index ist -1, vor der Zuweisung. Sie könnten auch die Bedingung kombinieren, um mit einigen anderen möglichen Fehlern null zurück (wie times == null oder times.Length < index - 1)

private string RangeMatch(char lastnameLetter, char[] letterLimits, string[] times) 
{ 
    string regTime; 
    int index = letterLimits.Length - 1; 

    while (index >= 0 && lastnameLetter < letterLimits[index]) 
      --index; 

    if (index == -1 || times == null || times.Length < index - 1) //invalid cases 
     return null; //return null 

    regTime = times[index]; 
    return regTime; 
} 
+0

Ich verstehe, dass der Index einen Wert von -1 haben kann, ich bin einfach nicht Sicher, warum oder wie man es repariert – bloop

+0

@BrookeG Eine einfache Lösung wäre 'null zurückgeben ', wenn der Index -1 ist:' if (index == -1) gebe null; 'zurück, bevor du' regTime = malst [ Index]; ' – Ian

Verwandte Themen