【发布时间】:2013-09-26 01:48:36
【问题描述】:
我有一个字符串,其中前 5 个字符从不为空,并且从 char 6 到结尾数据是可变长度。像这样的:
string inData = comPort1.ReadExisting();
//Console.WriteLine("inData: " + inData);
string origMsg = inData.Substring(4, 1);
//Console.WriteLine("origMsg: " + origMsg);
string seAnex = inData.Substring(5, 15); // ArgumentOutOfRangeException
inData = inData.Substring(5, inData.Length - 8);
//Console.WriteLine("new inData: " + inData);
if (seAnex == "some_text_15_ch")
{
//...
}
else
{
//...
}
输出:
inData: {1112Test}
origMsg: 2
new inData: Test
此代码抛出ArgumentOutOfRangeException: Index and length must refer to a location within the string。我该如何解决这个问题?
【问题讨论】:
-
您确定您的输入始终至少包含 5 个字符吗?失败时在调试或输出中运行它。 (另外,你在修剪空格吗?也许这就是它的原因。你的初始值是长度 5 或更多,然后你修剪减少它的长度。)
-
@mafap 好的,第四次,您需要找出
inData是什么。您的代码根本不会使用您提供的值抛出ArgumentOutOfRangeException。 -
我过去也遇到过这个问题。问题是子字符串是不友好的,它不使用智能。它完全按照您的要求执行,如果输入字符串太大或太小,它会引发异常。
-
哎呀,我忘记了字符串末尾的 } 括号。尝试 indata.Substring(5, indata.Length - 6) 代替。这将获取从第 5 个索引到最后一个字符的所有字符。
标签: c# winforms substring argumentexception