【问题标题】:C# How to use a value of the variable from the loop outside of the loopC#如何在循环外使用循环中的变量值
【发布时间】:2018-05-12 13:05:58
【问题描述】:

我正在尝试根据字符串计算 NMEA 校验和,因此我可以将它与给定的校验和进行比较,并声明字符串是否有错误。 这是我正在尝试的方式(给定的索引 0 只是单行的示例)

        List<string> richTextBoxLines = richTextBox1.Lines.ToList();
        richTextBoxLines.RemoveAll(x => !x.Contains("GPGGA"));

        richTextBox1.Lines = richTextBoxLines.ToArray();
        NOLbox.Text = richTextBox1.Lines.Count().ToString();

        int finalCheckSum = 0;
        string sumOfBytes = richTextBox1.Lines[0].Split('*').First().Substring(1);
        for (int i = 0; i == sumOfBytes.Length; i++)
            { 
            finalCheckSum ^= Convert.ToByte(sumOfBytes[i]);
            }
        checksumValue.Text = finalCheckSum.ToString();

第一部分除去 GGA 以外的通信,其余部分必须计算校验和。 问题是我将需要循环外的FinalCheckSum 变量值,到目前为止它返回0 - 因为它当然被声明为0,尽管在循环内声明它是没有意义的。鉴于此,我怎样才能在循环之外获取变量值以便以后使用它?

【问题讨论】:

  • 因为这个i == sumOfBytes.Length 我怀疑你的循环一直在运行。我猜你想要i &lt;= sumOfBytes.Length
  • i &lt; sumOfBytes.Length 是正确的。 &lt;= 将提供 IndexOutOfRangeException
  • 是的,没错。我有IndexOutOfRangeException&lt;=。现在,使用&lt; 效果很好。谢谢!

标签: c# visual-studio loops variables nmea


【解决方案1】:

对此的一般解决方案是将您需要的变量在范围内上移 1 级,直到它可以在您需要的地方访问。在您的情况下,我看到您已经这样做了,您的变量是在 for 循环之前声明的。错误必须在循环的停止条件上。我想你的意思是这样写:

for (int i = 0; i <= sumOfBytes.Length; i++)

【讨论】:

    猜你喜欢
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    相关资源
    最近更新 更多