2016-03-28 11 views
-1

これは単純なものでなければならないことを私は見落としていますが、それは2つの異なるクラスの問題を引き起こしています。彼らは同様の設定をしているので、私はちょうど1つのクラスのコードを投稿します。ここでは正確なエラーは次のとおりです。String List 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

?例外は、 'Substring'を使用しているところで、いくつかの行を示しているようなものです。これが実行されるときの 'input'の値は何ですか? –

+0

あなたは例外がスローされている場所がわからif' '内部のものです

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

申し訳ありませんが、私は悪いコメントをしていた。このエラーは、30行目の部分文字列部分で発生します。コメントは、ユーザーが無効な文字を入力したというエラーをスローすることです。 – Mercifies

答えて

3

Substringは、このインスタンスから部分文字列を取得します。部分文字列は、指定された文字位置から始まり、指定された長さを持ちます。あなたの場合、開始インデックスは5と与えられ、長さはinput.Length - 1として与えられます。今考えてみましょう。入力は、長さが15の一連の文字です。何を検索しようとしていますか?開始インデックスの部分文字列は5であり、長さは15-1、つまり14です。だからコンパイラは5から次の14文字を取ろうとしますが、15th文字の後には何もありません。エラーの原因となる。

具体的には、次のような条件を定義することができます。

+0

ありがとう、これは私が必要なものです。 – Mercifies

関連する問題