2014-10-26 7 views
1

У меня очень неприятная ошибка.ArgumentOutOfRangeException при индексе звонков

Мой следующий код, что я (тот же работал 1 час до)

 using (StreamReader reader = new StreamReader(dir + fileDAT)) 
     { 
      string line; 
      while ((line = reader.ReadLine()) != null) 
      { 
       line = reader.ReadLine(); 
       if (line.Substring(0,5) == "\tVNUM\t") 
       { 
        vnum = Convert.ToInt32(line.Substring(6)); 
        Console.ReadLine(); 
        Console.WriteLine(line); // Write to console. 
       } 

      } 
     } 

Но теперь он бросает на линии if (line.Substring(0,5) == "\tVNUM\t") ArgumentOutOfRangeException

Вы знаете, как это исправить? И сколько индексов имеет «\ t»?

+0

Каково значение строки при возникновении исключения? Это покажет вам, что не так. –

+0

Это было «\ tVNUM \ t0» .. Но теперь это работает. См. Ниже – IceTrailer

ответ

1

Возможно, line имеет длину менее 5 символов.
Замените ваш if следующим:

if (line.Length >= 5 && line.Substring(0,5) == "\tVNUM\t") 

\t символ представляет собой символ, поэтому он имеет длину 1 полукокса.

Кстати, вы уверены, что вам действительно нужно читать строки дважды за каждую итерацию? Я имею в виду следующее: часть кода

while ((line = reader.ReadLine()) != null) // 1st read 
{ 
    line = reader.ReadLine(); // 2nd read 

EDIT
Строка "\tVNUM\t" долго 6 символы, вы знаете. Не имеет смысла сравнивать его с подстрокой длиной 5 символов.

+0

Благодарим вас за ответ. строка строки имеет длину 7 символов, но если я заменю свой код на ваш, он пропустит только процедуру. – IceTrailer

+0

Да. Ты прав. Его избыточно, но я только поместил его два раза, чтобы проверить его. – IceTrailer

+0

Это потому, что строка '' \ tVNUM \ t "' '' '' 'длится долго. – Dmitry

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