Подстрока C # OutOfRangeException с правильной длиной строки - PullRequest
0 голосов
/ 21 мая 2019

Я обнаружил исключение вне диапазона во время операции подстроки.

Длина моей строки равна 100, а положение подстрок равно 58 и 94, что не должно было давать исключение вне диапазона.

Ниже приведены журналы и код:

enter image description here

string parameters = item.GetFormattedValue("Parameters").ToString();
Console.WriteLine("parameters = " + parameters.ToString());
Console.WriteLine("parameters length: " + parameters.Length);

Console.ReadKey();

int p1 = parameters.IndexOf(@">");
Console.WriteLine("p1 = " + p1);

int p2 = parameters.IndexOf(@"<", parameters.IndexOf(@"<") + 1);
Console.WriteLine("p2 = " + p2);

Console.ReadKey();

string parametersSub = parameters.Substring(p1, p2);
Console.WriteLine("parametersSub: " + parametersSub);

Console.ReadKey();

1 Ответ

3 голосов
/ 21 мая 2019

Второй аргумент в Substring - это длина строки для выбора, а не индекс для выбора до.

Поскольку ваши аргументы равны 58 и 94, выпытаясь выбрать из индекса 58 для 94 символов , который выходит за пределы длины вашей строки.

Чтобы выбрать между двумя индексами, найдите разницу между ними и используйте ее для длины довыберите:

int p1 = parameters.IndexOf(@">");
Console.WriteLine("p1 = " + p1);

int p2 = parameters.IndexOf(@"<", parameters.IndexOf(@"<") + 1);
Console.WriteLine("p2 = " + p2);

Console.ReadKey();

string parametersSub = parameters.Substring(p1, p2 - p1);
Console.WriteLine("parametersSub: " + parametersSub);

Конечно, вы все равно должны проверить, что и начальный индекс, и длина находятся в пределах строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...