抛出ArgumentOutOfRangeException的C#.Substring方法的奇怪行为

时间:2017-09-03 00:31:57

标签: c# substring

使用.Substring方法,我得到了一些奇怪的行为。例如,当我表达价值时:

    "(8) + (2)".Substring(3,6); 

我得到了结果:" +(2)"

但是,当我将下面的索引增加一个时,就像这样:

    "(8) + (2)".Substring(4,6); 

我抛出了ArgumentOutOfRangeException。

此外,它似乎没有抓住子串的正确部分,因为" +(2)"而不是来自:

    "(8) + (2)".Substring(3,8); 

因为空格,其中:

    "(8) + (2)".Substring(3,6); 

会导致:" +("。

我在这里缺少什么?

2 个答案:

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