具有正确字符串长度的 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);
当然,您仍然应该检查起始索引和长度是否都在字符串的范围内。
我在子字符串操作中遇到了超出范围的异常。
我的字符串长度是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);
当然,您仍然应该检查起始索引和长度是否都在字符串的范围内。