【问题标题】:Refactor foreach loops and passing variables in C# [duplicate]在 C# 中重构 foreach 循环和传递变量 [重复]
【发布时间】:2021-08-18 10:18:14
【问题描述】:

我是 C# 新手。我以为我懂一点 C#,但显然不是。

我正在尝试通过串行通信使用 C# Windows 窗体与 Arduino 通信,当单击按钮 3 时,Windows 窗体应用程序将发送一个命令,让 Arduino 发回所需的数据,用于 Windows表单应用程序填写指定的文本框,但我收到Error CS0103 The name 'tb' does not exist in the current context 错误。

我已经尝试了所有可能的选项,但没有运气。这是我的代码:

private void button3_Click(object sender, EventArgs e)
        {
            TextBox[] myTextBoxes = new TextBox[] { textBox9, textBox10, textBox11, textBox12, textBox13, textBox14, textBox15, textBox16 };
            String[] myCommands = new String[] { "#TRMMH1\n", "#TRMMM1\n", "#TRMMH2\n", "#TRMMM2\n", "#TRMMH3\n", "#TRMMM3\n", "#TRMMH4\n", "#TRMMM4\n" };
            String inString;

            foreach (String co in myTextBoxes.SelectMany(tb => myCommands))
            {
                port.Write(co);
                inString = port.ReadLine();
                tb.Text = inString;
            }

我已尝试搜索 Google 和 Stack Overflow,但我不确定要搜索什么。

【问题讨论】:

  • 在程序的设计器部分或类代码的更上方没有名为“tb”的文本框。您需要使用或更改文本框的实际名称 - 代表变量名称。

标签: c# winforms arduino


【解决方案1】:

您有两个大小为 8 的数组。您不能使用 foreach 以这种方式处理两个数组 - 您需要一个 for 循环,以便您可以同时使用运行变量

TextBox[] myTextBoxes = new TextBox[] { textBox9, textBox10, textBox11, textBox12, textBox13, textBox14, textBox15, textBox16 };
String[] myCommands = new String[] { "#TRMMH1\n", "#TRMMM1\n", "#TRMMH2\n", "#TRMMM2\n", "#TRMMH3\n", "#TRMMM3\n", "#TRMMH4\n", "#TRMMM4\n" };

for(int i=0; i<myTextBoxes.Lenght && i<myCommands.Lenght; i++){
    TextBox curTB = myTextBoxes[i];
    String curCMD = myCommands[i];
   
    port.Write(curCMD);
    string temp = port.ReadLine();
    curTB.Text = temp;
}

我没有运行此代码,因此可能会出现错误或语法错误。

【讨论】:

  • 非常感谢克里斯托弗!这正是我试图通过 foreach 循环实现的目标。
猜你喜欢
  • 2020-08-21
  • 1970-01-01
  • 2019-11-29
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 2016-01-01
  • 1970-01-01
  • 2022-01-12
相关资源
最近更新 更多