2026-05-19
C#
0

目录

📌 上节回顾
💡 核心知识讲解
循环是什么?用流水线来理解
四种循环,一张表说清楚
for 循环:生产计划型
while 循环:条件监控型
do-while 循环:开机自检型
foreach 循环:传感器巡检型
💻 VS2026 操作步骤
🤖 Vibe Coding Prompt 写法参考
📋 完整代码示例
🏭 工业实战小案例
⚠️ 避坑提醒
这几个坑,我替你踩过了
📝 本节总结

产线上有32个温度传感器,领导说:"把超温的设备都标红,做到监控界面上。"

你打开 VS2026,新建了一个 List,然后……开始一个一个写 if

写到第5个,手已经酸了。

其实,这件事交给循环语句,3行代码就能解决。

今天这节,就是专门为这类"重复性操作"准备的。


📌 上节回顾

「上一节我们学了 switch 表达式模式匹配进阶,掌握了用简洁语法替代复杂多分支判断的方法。今天在这个基础上,我们进一步学习循环语句——当条件判断需要反复执行时,循环就是你的下一件武器。」


💡 核心知识讲解

循环是什么?用流水线来理解

工厂里有一条冲压流水线,每隔5秒冲压一次,直到今天的生产计划完成为止。

这就是循环的本质:在满足条件的情况下,重复执行同一段操作

C# 提供了4种循环语句,各有侧重,不是随便选一个就行的。


四种循环,一张表说清楚

循环类型适用场景工厂类比
for已知次数的重复生产计划:今天做500件
while条件满足就继续设备温度没降下来就持续报警
do-while至少执行一次开机自检,先跑一遍再判断
foreach遍历集合中每个元素逐一检查所有传感器状态

for 循环:生产计划型

for 循环适合你明确知道要循环多少次的场景。

语法结构是:for (初始值; 条件; 每次变化)

for (int i = 0; i < 500; i++) { // 冲压一次 }

i 就是计数器,从0开始,每次加1,到499停止,正好500次。」

工厂里批量写入设备编号、生成巡检记录序号,都是这个套路。


while 循环:条件监控型

while 循环适合不知道要循环几次,但知道什么时候停的场景。

只要括号里的条件是 true,就一直跑。

while (deviceTemp > alarmThreshold) { // 持续触发报警 }

⚠️ 注意:如果条件永远是 true,程序会死循环卡死。必须确保循环体内有改变条件的逻辑。


do-while 循环:开机自检型

do-whilewhile 的区别只有一个:先执行,再判断

哪怕条件一开始就不满足,也会至少跑一遍。

do { // 执行一次自检 } while (selfCheckResult == false);

类比工厂:设备上电后,必须先跑一次自检程序,通过了才进入正常运行模式。

「先做一次,是 do-while 的核心特征。」


foreach 循环:传感器巡检型

foreach 专门用来遍历集合(列表、数组等)中的每一个元素

不需要手动管计数器,代码更简洁,也更不容易出错。

foreach (var sensor in sensorList) { // 检查每个传感器 }

sensorList 是传感器列表,sensor 是每次循环取出的那一个。

工厂里的设备台账、报警记录列表、班次数据——凡是"一批数据逐条处理",优先选 foreach


💻 VS2026 操作步骤

Step 1:新建控制台项目

打开 VS2026,选择 文件 > 新建 > 项目,搜索"控制台应用",选择 .NET 10 框架,项目名建议命名为 LoopDemo,点击创建。

VS2026 Copilot 辅助:项目创建完成后,Copilot 会自动在 Program.cs 中生成顶级语句(top-level statements)模板,直接在其中编写循环代码即可,无需手动写 Main 方法。

Step 2:输入代码并触发 Copilot 补全

Program.cs 中输入注释 // 遍历所有传感器,超温则报警,然后按回车。

VS2026 Copilot 会根据注释内容自动推断并补全循环结构,包括变量名、条件判断和输出语句。

如果补全内容不符合预期,按 Tab 接受当前建议,还可以试一下Alt + →

Step 3:运行调试

F5 启动调试,在"输出"窗口查看每次循环的打印结果。

如需逐步查看循环执行过程,在 foreach 行左侧点击添加断点(红点),再按 F5,每次按 F10 单步执行,可在"局部变量"窗口实时看到 sensor 的当前值。


🤖 Vibe Coding Prompt 写法参考

如果你想让 Copilot 直接帮你生成完整的循环逻辑,可以这样写 Prompt:

// 我有一个设备温度列表 deviceTempList,类型是 List<double> // 请用 foreach 遍历,找出超过85度的设备并打印编号和温度 // 设备编号从1开始

写完注释后,Copilot 会自动生成完整代码块,你只需确认逻辑是否正确即可。


📋 完整代码示例

这段代码模拟了一条注塑产线的温度巡检系统:遍历所有模具温度传感器,统计超温数量,并输出报警信息。

csharp
// 注塑产线温度巡检系统 - 循环语句综合演示 // 运行环境:VS2026 + .NET 10 + C# 14 using System; using System.Collections.Generic; // 模拟传感器数据(实际项目中来自 OPC UA 或 Modbus 读取) List<(int SensorId, double Temperature)> sensorDataList = new() { (1, 72.5), (2, 88.3), // 超温 (3, 65.0), (4, 91.7), // 超温 (5, 78.2), (6, 55.4), (7, 86.1), // 超温 (8, 70.9) }; // 报警阈值(注塑模具温度上限) double alarmThreshold = 85.0; // 超温计数器 int overTempCount = 0; Console.OutputEncoding=System.Text.Encoding.UTF8; // 支持输出中文和表情符号 Console.WriteLine("===== 注塑产线温度巡检开始 =====\n"); // 使用 foreach 遍历所有传感器数据 foreach (var sensor in sensorDataList) { // 判断是否超温 if (sensor.Temperature > alarmThreshold) { overTempCount++; Console.WriteLine($"[⚠️ 报警] 传感器 #{sensor.SensorId} 温度:{sensor.Temperature}°C,已超阈值 {alarmThreshold}°C"); } else { Console.WriteLine($"[ 正常] 传感器 #{sensor.SensorId} 温度:{sensor.Temperature}°C"); } } Console.WriteLine($"\n===== 巡检完成 ====="); Console.WriteLine($"共检测传感器:{sensorDataList.Count} 个"); Console.WriteLine($"超温传感器数:{overTempCount} 个"); // 使用 for 循环生成本次巡检的批次编号(模拟写入日志) Console.WriteLine("\n----- 本次巡检批次编号生成 -----"); for (int i = 1; i <= overTempCount; i++) { // 格式:年月日 + 序号,例如 20260416-001 string alarmRecordId = $"20260416-{i:D3}"; Console.WriteLine($"报警记录编号已生成:{alarmRecordId}"); } // 使用 while 循环模拟等待设备降温(简化版) double currentTemp = 91.7; int coolingSeconds = 0; Console.WriteLine("\n----- 模拟设备 #4 降温过程 -----"); // 每次循环模拟降温1度,直到温度低于阈值 while (currentTemp > alarmThreshold) { currentTemp -= 1.5; coolingSeconds += 10; Console.WriteLine($" 降温中... 当前温度:{currentTemp:F1}°C(已等待 {coolingSeconds} 秒)"); } Console.WriteLine($"设备 #4 已恢复正常,当前温度:{currentTemp:F1}°C"); // 使用 do-while 模拟开机自检(至少执行一次) Console.WriteLine("\n----- 设备 #4 重启自检 -----"); bool selfCheckPassed = false; int checkCount = 0; do { checkCount++; // 模拟第2次自检通过 selfCheckPassed = (checkCount >= 2); Console.WriteLine($" 第 {checkCount} 次自检:{(selfCheckPassed ? "通过 ✅" : "未通过,重试...")}"); } while (!selfCheckPassed); Console.WriteLine("设备自检完成,进入正常运行模式。");

image.png

运行后,控制台会依次输出每个传感器的温度状态,标红报警的传感器编号,并自动生成报警记录批次号。接着模拟设备降温过程,最后完成开机自检流程。4种循环语句在同一个工业场景下协同工作的效果,一眼就能看清楚。


🏭 工业实战小案例

场景任务: 汽车焊接产线有20个焊枪,每个焊枪有一个当日焊点计数值,统计出焊点数低于800的焊枪编号,生成欠产预警报告。

思路拆解:

  1. 用数组存储20个焊枪的焊点数据
  2. for 循环遍历数组,下标就是焊枪编号
  3. 判断焊点数是否低于欠产阈值 800
  4. 满足条件就记录编号并打印预警
  5. 最后汇总欠产焊枪总数
csharp
// 汽车焊接产线 - 焊枪欠产预警 // 运行环境:VS2026 + .NET 10 + C# 14 int[] weldingPointCounts = { 920, 780, 850, 760, 910, 830, 690, 970, 800, 750, 880, 810, 740, 960, 820, 770, 900, 680, 840, 790 }; // 欠产阈值 int productionThreshold = 800; int underProductionCount = 0; Console.WriteLine("===== 焊枪欠产预警报告 ====="); for (int gunIndex = 0; gunIndex < weldingPointCounts.Length; gunIndex++) { int weldCount = weldingPointCounts[gunIndex]; if (weldCount < productionThreshold) { underProductionCount++; Console.WriteLine($"[预警] 焊枪 #{gunIndex + 1:D2} 今日焊点数:{weldCount},低于计划 {productionThreshold - weldCount} 点"); } } Console.WriteLine($"\n共 {underProductionCount} 台焊枪欠产,请安排维护人员排查。");

image.png

运行后,控制台输出所有欠产焊枪的编号和缺口数量,最后一行汇总欠产总台数——这份报告直接可以截图发给班长。


⚠️ 避坑提醒

这几个坑,我替你踩过了

坑1:for 循环边界写错,少跑或多跑一次

for (int i = 1; i <= sensorList.Count; i++) 用下标访问 sensorList[i]

for (int i = 0; i < sensorList.Count; i++) 用下标访问 sensorList[i]

📌 原因:C# 的集合下标从 0 开始,Count 是总数,最后一个元素下标是 Count - 1,写成 <= Count 会越界报错。


坑2:while 循环忘了改条件,直接死循环

while (deviceTemp > 85) { Console.WriteLine("报警"); } // 没有改变 deviceTemp

✅ 循环体内必须有让条件趋向 false 的操作,比如 deviceTemp -= 1.5;

📌 原因:条件永远为 true,程序会卡死,工控机界面直接假死,生产线跟着停。


坑3:foreach 循环里修改集合,直接抛异常

❌ 在 foreach 循环体内对正在遍历的 sensorList 执行 Add()Remove()

✅ 先用 for 循环或 LINQ 找出需要操作的元素,循环结束后再统一修改

📌 原因:foreach 遍历期间集合不允许被修改,C# 运行时会直接抛出 InvalidOperationException


📝 本节总结

「学完本节,你掌握了:」

for 用于次数确定的批量操作,while 用于条件驱动的持续监控,do-while 保证至少执行一次的自检场景,foreach 则是遍历设备列表、报警记录等集合数据的首选。四种循环各司其职,对应工厂里四类最常见的重复性任务。理解它们的边界条件和适用场景,是写出稳定工业程序的基本功。

把今天的代码跑一遍,改改阈值数字,感受一下循环的"自动化"——这才是程序比人快的地方。


📖 本文是《C# 工业数字化应用开发专家》系列第 016 节

上一节:【新特性:switch 表达式模式匹配进阶】

下一节:【跳转语句:break、continue、return、goto】(明天更新)

💬 你在工厂里有没有遇到过"批量处理数据"的需求?

是报警记录、设备台账、还是班次产量统计?欢迎在评论区说说你的场景,也许下一篇案例就来自你的留言。

🔔 还没关注的同学记得点击关注,系列课程持续更新,学完这420节,从工厂小白到工业软件开发专家,我们一起走。


#C#编程 #工业数字化 #工厂工程师 #编程入门 #dotnet开发

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!