【问题标题】:All indexes of string-array return null字符串数组的所有索引都返回 null
【发布时间】:2021-04-16 13:21:21
【问题描述】:

我已经用 C# (winforms) 为一个项目编写代码 2 周了。我的目标是为 FFT 分析(频率域)构建一个 GUI。

我的问题:

我一直遇到同样的问题:我通过串行端口在一个字符串中接收由空格分隔的 1024 个 int 值(一个块大小),然后由 \n 终止到缓冲区 uart_buf。为了获得数值,我使用 uart_buf.split(' ') 到 string[] parse_buf 中,然后尝试访问 ASCII 格式的单个值,如下所示:parse_buf[i] = val_buf。然后我尝试通过 value = int.Parse(val_buf) 形成一个数字,但没有成功: System.ArgumentNullException: value cant be NULL.

我的尝试:

  • 值 = int.Parse(parse_buf[i]);这会返回格式异常
  • 将 parse_buf[i] 打印到文本框会显示预期值(接收到的数据正确)
  • 观察主缓冲区 uart_buf 显示如下有效数据:“41 30 2 0 0 0 0 0 0 0 3 40 500 69...”
  • 从索引 1(或任何其他)而不是 0 开始没有任何变化

我没有得到什么:

parse_buf 的单个元素(即字符串)包含文本形式的值,例如“41”。我想将它保存到一个常规字符串 val_buf,我应该能够将其解析为 int。为什么通过 parse_buf[i] 访问的每个字符串都是空的?

代码片段:

        private void displayData(object o, EventArgs e)
    {
        parse_buf = uart_buf.Split(' ');
        tb_data.Text = parse_buf[0]; //this shows valid data in a tb
        for (i = 1; i < parse_buf.Length; i++)  //about 1024 loops
        {
            //problem area:
            parse_buf[i] = val_buf;
            fft = int.Parse(val_buf);

            //ignore this:
            f = i * 20;
            chart1.Series[0].Points.AddXY(f, fft);
        }
    }

我通常在嵌入式系统中使用 C 语言,很抱歉没有立即发现问题。谢谢。

【问题讨论】:

  • 我怀疑parse_buf[i] = val_buf; 应该是val_buf= parse_buf[i];。很难说,因为我们不知道 val_buf 的预期目的或声明的位置。 (你为什么要使用它?为什么不只使用fft = int.Parse(parse_buf[i]);?为什么fft 显然是一个字段而不是局部变量?同上val_bufparse_buf。尽可能使用局部变量。)跨度>
  • 除此之外,我强烈建议在编写 .NET 代码时遵循 .NET 命名约定。
  • 另外,您可能希望从索引 0 开始循环,因为目前您缺少数组中的第一个元素。
  • 正如 derpischer 指出的那样,索引是错误的,这是先前实验留下的。现在又从 0 开始了。
  • 就像 Jon Skeet 提到的, parse_buf[i] = val_buf 不仅被错误地翻转,而且是不必要的;它已被删除。尽管如此,就像我在“我尝试过的事情”中提到的那样: value = int.Parse(parse_buf[i]);这会返回格式异常,格式错误。除了字符串,它还期待什么?

标签: c# arrays string indexing


【解决方案1】:
private void DisplayData(object o, EventArgs e)
{
    parse_buf = uart_buf.Split(' ');
    tb_data.Text = parse_buf[0]; //this shows valid data in a tb
    
    for (i = 0; i < parse_buf.Length; i++)  //about 1024 loops
    {
        //problem area:
        int.TryParse(parse_buf[i], out ftt);

        //ignore this:
        chart1.Series[0].Points.AddXY(i * 20, fft);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 2012-01-22
    • 2016-05-15
    相关资源
    最近更新 更多