在子字符串操作期间遇到了超出范围的异常。
我的字符串的长度是100,子字符串的位置是58和94,这应该没有超出范围的异常。
下面是日志和代码:
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();
答案 0 :(得分:3)
second argument in 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);
当然,您仍然应该检查起始索引和长度是否都在字符串的范围内。