簡體   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