2016-03-28 2 views
-1

Я знаю, что это должно быть что-то простое, я пропускаю, но это вызывает у меня проблемы с двумя разными классами. У них аналогичная настройка, поэтому я просто отправлю код для одного класса. Вот точная ошибка:Строковый список OutOfRangeException

System.ArgumentOutOfRangeException: Index and length must refer to a location within the string. Parameter name: length at System.String.Substring(Int32 startIndex, Int32 length) at Terminal_Control_Center.UserDir.newDir() in C:\Users\Chris\Documents\GitHub\TerminalControlCenter\Terminal Control Center\Terminal Control Center\UserDir.cs:line 30 at Terminal_Control_Center.Program.Main(String[] args) in C:\Users\Chris\Documents\GitHub\TerminalControlCenter\Terminal Control Center\Terminal Control Center\Program.cs:line 259

namespace Terminal_Control_Center 
{ 
    class UserDir 
    { 
     List<string> userDir; 
     string input = ""; 
     public UserDir(List<String> userDir, string input) 
     { 
      this.userDir = userDir; 
      this.input = input; 
     } 

     public void newDir() 
     { 
      // checks for invalid characters 
      if (input.Contains("/") || 
       input.Contains(".") || 
       input.Contains(",") || 
       input.Contains("+") || 
       input.Contains("*") || 
       input.Contains("\\") || 
       input.Contains("]") || 
       input.Contains("[") || 
       input.Contains("{") || 
       input.Contains("}") || 
       input.Contains(";") || 
       input.Contains("'") || 
       input.Contains("\"") || 
       input.Contains(":") || 
       input.Contains("<") || 
       input.Contains(">") || 
       input.Contains("%")) 
      { 
       // use later for invalid input 
      } 
      else // throws error 
      { 
       // currently throwing error LINE:30 
       userDir.Add(input.Substring(5, input.Length - 1)); 
      } 
     } 

     public string getDir() 
     { 
      return userDir[0]; 
     } 
    } 
} 
+0

, что находится внутри 'if' –

+0

Вы уверены, что о том, где исключение бросают? Звучит очень похоже, что исключение указывает пару строк вниз, где вы используете 'Substring'. Какова ценность 'input' в то время, когда это выполняется? –

+0

Извините, у меня были плохие комментарии. Ошибка возникает в строке 30, подстрочной части. Комментарий заключается в том, чтобы выдать пользователю ошибку, в которой они вводят недопустимые символы. – Mercifies

ответ

3

Substring Извлекает подстроку из данного экземпляра. Подстрока начинается с заданной позиции символа и имеет заданную длину; В вашем случае начальный индекс указывается как 5, а длина указана как input.Length - 1. Теперь рассмотрим; Вход представляет собой последовательность символов длиной 15; то, что вы пытаетесь получить? индексом начала подстроки является 5 и имеют длину 15-1 т. е. 14. Таким образом, компилятор попытается взять следующие 14 символов от 5, но после 15th ничего не осталось. которые вызывают ошибку;

Более конкретно вы можете определить условия, как следующее:

int startIndex = 5; // Will be the start index 
    if (input.Length < startIndex || ...) 
    { 
     // use later for invalid input 
    } 
    else 
    { 
     // This will take all character comes after the specified index(`5`) 
     userDir.Add(input.Substring(5)); 
    } 
+0

Спасибо, это то, что мне было нужно. – Mercifies

Смежные вопросы