具有正确字符串长度的C#子字符串OutOfRangeException

时间:2019-05-21 03:06:23

标签: c# exception substring indexoutofrangeexception

在子字符串操作期间遇到了超出范围的异常。

我的字符串的长度是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 个答案:

答案 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);

当然,您仍然应该检查起始索引和长度是否都在字符串的范围内。