簡體   English   中英

C#中動態列表中的范圍外異常

[英]Out of range exception in a dynamic list in C#

當我嘗試訪問我使用計數器變量實時提供數據的列表時,出現ArgumentOutofRangeException異常。 這是我的部分代碼

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
    RxString = serialPort1.ReadExisting();
    RxString = RxString.Replace("$", "");
    this.Invoke(new EventHandler(DisplayText));
}


private void DisplayText(object sender, EventArgs e)
{
    richTextBox1.AppendText(RxString);
    parsed(ref ctr);
    richTextBox2.Text = String.Join(Environment.NewLine, stringList);
}

public void parsed(ref int ctr)
{
    string line;
    line = richTextBox1.Text;

    stringList= new List<String(line.Split(','));
    displayval(ref int ctr);
}

public void displayval(ref int ctr)
{

   line = RxString;

   stringList= new List<String>(line.Split(','));
   richTextBox3.AppendText("\n Pressure:" + stringList[ctr]);
   ctr++;
   richTextBox3.AppendText("\n Accelerometer:" + stringList[ctr]);
   ctr++;
   richTextBox3.AppendText("\n Temperature:" + stringList[ctr]);
   ctr++;
   richTextBox3.AppendText("\n Height:" + stringList[ctr]);
   ctr++;
}

我正在從Arduino獲取實時串行輸入,我想解析CSV值,例如$ 1032,432,541,145。

我可以將其解析為單個值,但是后來我無法使用ctr訪問列表。 我是C#的新手,因此非常感謝您的幫助。

是否因為在DisplayVal方法中將ctr設置為ctr + 3?

如果是這樣,那么當您嘗試訪問它時,它將超出范圍,因為它下次試圖從第三個值開始訪問列表。

您可能在此處閱讀了不完整的消息:

RxString = serialPort1.ReadExisting();

因此,它可能不是“ $ 1032,432,541,145”,而是“ $ 1032,432,5”,並且您的異常會發生。

您應該在協議中添加一些消息終止符號。 這樣您就可以看到收到完整的消息。

您要追加由Environment.NewLine分隔的行

解析時,您使用逗號“,”分割。 給出以下兩行:

"value1;value2;value3;value4"
"value5;value6;value7;value8"

您解析的stringList將具有值

"value1"
"value2"
"value3"
"value4\nvalue5" << here, last value of 1st line followed by NewLine 
                    followed by first value of second line
"value6"
"value7"
"value8"

我建議您分別解析每一行。

例如,如果您知道您的值將不包含Environment.NewLine字符串,則可以先按NewLine分割,然后再按“,”分割:

var lines = richTextBox.Text.Split(Environment.NewLine)
stringList = new List<string>();
foreach (var l in lines)
    stringList.AddRange(l.Split(","));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM