繁体   English   中英

String.Substring方法(Int32,Int32)抛出ArgumentOutOfRangeException

[英]String.Substring Method (Int32, Int32) throws ArgumentOutOfRangeException

我有一个字符串,其中前5个字符从不为空,并且从char 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
            {
                //...
            }
        }

我想您的目的是从COM通信收到的长数据字符串"{111abcxzy}{111abcxzy}{..." ,从"{111abcxzy}"格式的消息中获取数据信息?

我敢打赌,您没有说的字符串值。 如果实际上是5个以上的字符,则在调用SubString(4,1)时就不会出现ArgumentOutOfRange异常。 打印出该值或在调试器中检查该值以确认

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM