2014-09-16 2 views
0

Visual Studio генерирует IndexOutOfRangeException внутри этой функции:таинственный IndexOutOfRangeException

public static string ExtractString(string path, string startString, char endChar) 
{ 
    string content = File.ReadAllText(path); 

    /*at this line*/return content.Split(new string[] { startString }, StringSplitOptions.None)[1].Split(endChar)[0].Trim(); 
} 

Любая идея, что я делаю неправильно здесь?

+0

исключение прямо вперед. вы получаете доступ к индексу, который недоступен или не существует, или больше длины вашего массива. –

+0

Вместо того, чтобы поднять руки с тревогой, узнайте, где ошибка. Разбейте код на несколько строк, которые делают одну вещь вместо одной строки, которая делает все. Тогда будет легко увидеть, где проблема основана на том, на какой строке она ломается. – jmcilhinney

ответ

0

Это странный способ сделать это, но я протестировал с помощью собственного образца, и он работает нормально при ожидаемых обстоятельствах.

Проблема возникает, когда startString не найден, потому что результирующий массив из первого string.Split будет содержать один элемент (исходную строку ввода). Когда вы пытаетесь разделить второй элемент на endChar, нет второго элемента для поиска, и это ваше исключение.

Я уверен, что есть более элегантные способы сделать это, но это будет делать эту работу, возвращая null если либо startString или endChar не может быть найдено:

public static string ExtractString(string content, string startString, char endChar) 
{ 
    int i, j; 

    i = content.IndexOf(startString); 

    if (i == -1) 
     return null; 
    else 
     i += startString.Length; // Start at char after startString 

    j = content.IndexOf(endChar); 

    if (j == -1) 
     return null; 

    return content.Substring(i, j - i); 
} 
+0

Спасибо, без вашего намека, я никогда бы не проверил текстовый файл снова в ближайшее время. Содержимое было как-то удалено. Очевидно, что ошибка исчезла, я восстановил файл. И спасибо за перестроенную функцию. – betaFlux

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