Ошибка при выполнении теста : Index and length must refer to a location within the string. (Parameter 'length')
Реализовал регулярное выражение , в которое входят коды стран. Далее , я ищу эти коды в тексте , после нахождения , я добавляю в лист полное название страны. Скорее всего я сделал костыль при нахождении кода. В шаблоне код передается в кавычках одинарных , а ключ в Dictionary естественно без(ключ это код, а значение это полное название , например US, США). Чтобы корректно вытащить значение по ключу , я убрал эти кавычки через Substring, он стал отображать в отладчике название страны , но при этом выдает ошибку: System.ArgumentOutOfRangeException : Index and length must refer to a location within the string. (Parameter 'length'
Как исправить ошибку ? В голову не приходит
Код (один из методов , который не проходит тест):
public List<string> Text_Regul(string text)
{
List<string> coun;
Match m;
string teamp;
try
{
var list = GettingTextReg();
string pattern = string.Format("\'({0})\'", string.Join("|", list.Keys));
coun = new List<string>();
m = Regex.Match(text, pattern);
int i=1;
while (m.Success)
{
Group g = m.Groups[i];
if (g.Length >= 2)
{
teamp = list[g.Value.Substring(1, 2)];// тут ошибка.
if (list.ContainsKey(teamp))
{
coun.Add(teamp);
}
}
i++;
m = m.NextMatch();
}
} catch(ArgumentNullException e)
{
throw new ArgumentNullException(e.Message);
}
return coun;
}
Скриншот:
Ответы (1 шт):
Вместо SubString для отрезания кавычек используйте Trim, потому что код страны не обязательно будет двухзначный, например "3". Конкретно в вашем случае непонятно, что содержит g.Value, возможно там строка длиной короче 3 символов, поэтому и исключение.
teamp = list[g.Value.Trim('"')];

