![](/img/trans.png)
[英]Bitmap(Int32, Int32, PixelFormat) throws ArgumentException
[英]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.