String.Substring(...)方法提供异常

时间:2012-12-05 14:19:49

标签: c# .net string substring

我想将一个字符串保存到richtextbox中的另一个字符串strTotal。然后我想把它分成两个SubString,比如firstPart和secondPart,中间索引说:midIndex。

然后我想在firsthalf中更改一些值并与secondhalf连接。最后将它显示给richTextBox。

为此我使用了这段代码:

我的上次调试:

rtxtQueryPan.Text.Length = 53; midIndex = 45;

 //string Totalqueryy = rtxtQueryPan.Text;
 string firstHalf = rtxtQueryPan.Text.Substring(0, midIndex-2); 
 string secondHalf = rtxtQueryPan.Text.Substring((midIndex- 1), (rtxtQueryPan.Text.Length - 1)); // THIS LINE SHOWS ERROR

 string duplicateFirstHalf = firstHalf;
 firstHalf += " " + clColumnNames.Text + ",";
 rtxtQueryPan.Text = firstHalf+secondHalf;

代码的第3行说:

索引和长度必须指向字符串中的位置。 参数名称:长度

我检查了长度,midIndexvalue等。但是没有发现任何线索。

3 个答案:

答案 0 :(得分:4)

C#的.Substring函数将长度,而不是位置作为其第二个参数。

因此,您可能希望编写以下代码:

rtxtQueryPan.Text.Substring(midIndex-1, (rtxtQueryPan.Text.Length-1) - midIndex);

此外,长度参数是可选的,而不是您应该提供的内容,因为您希望包含其余字符串。你也可以这样写:

rtxtQueryPan.Text.Substring(midIndex-1);

答案 1 :(得分:1)

Substring只能在被执行的字符串的边界内工作。在这里,rtxtQueryPan.Text指的是RichTextBox中的文本,该文本比字符串中当前保存的文本长。请记住Substring的参数是起始位置和长度。

您希望(rtxtQueryPan.Text.Length-1) - midIndex作为第二个参数。

我希望这会有所帮助。

答案 2 :(得分:1)

问题是你从中途抓住第二个字符串并说我想要整个字符串。如果您使用子字符串,则第二个pramater是子字符串的长度。这应该解决它。 string secondHalf = rtxtQueryPan.Text.Substring((midIndex- 1), (rtxtQueryPan.Text.Length - 1-midIndex));