String.Substring Method (Int32, Int32) throws ArgumentOutOfR
本文关键字:Int32 throws ArgumentOutOfR String Method Substring | 更新日期: 2023-09-27 18:32:20
我有一个字符串,其中前 5 个字符永远不会为空,从字符 6 到结尾数据是可变的leght。像这样:
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
。我该如何解决这个问题?
string origMsg = inData.Substring(4, 1);
"startIndex 不能大于字符串的长度"
换句话说,
4 不能大于 inData 的长度
4 大于 inData 的长度
inData.Length 小于 4
我不确定你想用你的代码做什么。但是,如果只是为了解决异常。你可以像这样修复:
string inData = comPort1.ReadExisting();
//Console.WriteLine("inData: " + inData);
if (inData.Length >= 5)
{
string origMsg = inData.Substring(4, 1);
//Console.WriteLine("origMsg: " + origMsg);
//string seAnex = inData.Substring(5, 15); // ArgumentOutOfRangeException
string seAnex = inData.Substring(5, inData.Length - 5);
//inData = inData.Substring(5, inData.Length - 8);
//Console.WriteLine("new inData: " + inData);
if (seAnex == "some_text_15_ch")
{
//...
}
else
{
//...
}
}
我想您的目的可以从具有长数据字符串"{111abcxzy}{111abcxzy}{..."
从COM通信接收的长数据字符串中的"{111abcxzy}"
消息中获取数据信息?
我敢打赌你没有你说的字符串值。如果它实际上是 5+ 个字符长,则当您在其上调用 SubString(4,1) 时,您就不会有 ArgumentOutOfRange 异常。打印出值或在调试器中检查以确认