c# - 在 C# 中重构 foreach 循环和传递变量
问题描述
我是 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,但我不确定要搜索什么。
解决方案
您有两个大小为 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;
}
我没有运行此代码,因此可以预料到一个错误或语法错误。
推荐阅读
- r - 在两个轴上注释 ggplot2:文本不断改变位置
- c - My function that returns first and last index of a chosen real number in an array executes but doesn't always work
- cloud - 如何在 Openstack 主机上运行的 Ubuntu 16 VM 上配置网络?
- postgresql - Postgresql 触发器函数
- antlr - ANTLR 语法中 [\p{Lu}] 的含义
- python - 在同一项目中从 App Engine 连接到 Google Cloud SQL Server - 登录超时
- python - 迭代参数分布
- java - 自定义标头参数 - Spring Boot
- python - 将熊猫数据框中的字符串转换为整数
- notifications - Keycloak FTL:如何访问会话已结束或用户在自定义主题的登录模板中注销的模板变量