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

C# Substring OutOfRangeException With Correct String Length

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

我的字符串长度是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();

second argument in Substring是字符串的长度到select,而不是索引到select最多。

由于您的参数是 58 和 94,您正尝试从索引 58 select 获取超出字符串长度的 94 个字符

到两个索引之间的select,得到两者之间的差异并将其用于select的长度:

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

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