使用.Substring方法,我得到了一些奇怪的行为。例如,当我表达价值时:
"(8) + (2)".Substring(3,6);
我得到了结果:" +(2)"
但是,当我将下面的索引增加一个时,就像这样:
"(8) + (2)".Substring(4,6);
我抛出了ArgumentOutOfRangeException。
此外,它似乎没有抓住子串的正确部分,因为" +(2)"而不是来自:
"(8) + (2)".Substring(3,8);
因为空格,其中:
"(8) + (2)".Substring(3,6);
会导致:" +("。
我在这里缺少什么?
答案 0 :(得分:1)
您收到ArgumentOutOfRangeException的原因是您错误地使用了SubString方法。在.Net中,SubString方法的签名是SubString(int index, int length)
。这意味着当你执行
"(8) + (2)".Substring(3,6);
您要求从索引3开始的子串,即+符号前面的空格,即6个字符长。所以你会得到SubString“+(2)”。如果您要说SubString(2,3),您将获得SubString“)+”。
现在你得到ArgumentOutOfRangeException的原因就像艾米所说的那样
4 + 6 = 10
你的字符串长度只有9个字符。如果您要求从索引4开始的字符串长度为5个字符,则会得到“+(2)”。
如果您需要更多信息,请查看Microsoft
中的文档答案 1 :(得分:0)
您错误地将String.Substring(int, int)
的第二个参数误认为是结束索引,而实际上它是从起始索引(第一个参数)开始的字符数。见String.Substring Method (Int32, Int32)