2026-05-22
C#
0

目录

🔧 开篇
📌 上节回顾
💡 核心知识讲解
跳转语句是什么?
break:紧急停机按钮
continue:跳过这一件,继续下一件
return:任务完成,直接交差
goto:传送门,慎用
💻 VS2026 操作步骤
🤖 Vibe Coding 提示词写法
📋 完整代码示例
🏭 工业实战小案例
⚠️ 避坑提醒
这几个坑,我替你踩过了
📝 本节总结

🔧 开篇

注塑车间的工程师小李最近遇到了一个让他抓狂的问题。

他写了一段采集模具温度的循环程序,逻辑很清楚:温度超过阈值就停止采集,触发报警。

代码跑起来,报警灯亮了,但采集循环还在继续转——数据一条条往数据库里写,停不下来。

他盯着屏幕看了二十分钟,才发现:循环里压根没有"出口"

这就是今天要解决的问题。学完本节,你的循环代码想停就停、想跳就跳,完全掌控。


📌 上节回顾

「上一节我们学了循环语句,掌握了用 forwhiledo-whileforeach 让代码反复执行的方法。

今天在这个基础上,我们进一步学习如何在循环执行过程中主动控制流程走向——该停的时候停,该跳的时候跳。」


💡 核心知识讲解

跳转语句是什么?

循环语句解决的是"重复执行"的问题。但工厂程序里,不可能每次都等循环自然跑完。

设备报警要立刻停采集,某个产品检测不合格要跳过,当前任务完成要立刻返回结果——这些都需要主动打断或跳出程序的正常流程。

跳转语句(Jump Statement)就是干这个的。C# 提供了四个:breakcontinuereturngoto


break:紧急停机按钮

break 的作用是立刻终止当前循环或 switch 分支,跳到循环体外面继续执行。

用工厂类比:就像车间里的紧急停机按钮。不管生产线转到哪一步,按下去,立刻停。

csharp
// 示例:温度超限,立刻停止采集 for (int i = 0; i < 100; i++) { if (deviceTemp > alarmThreshold) break; // 直接退出整个 for 循环 CollectData(); }

break 只退出最近一层循环。如果你有两层嵌套循环,内层 break 只退出内层,外层还在继续转。这是初学者最常踩的坑,后面避坑部分会专门讲。


continue:跳过这一件,继续下一件

continue 不会退出循环,它的作用是跳过本次迭代剩余的代码,直接进入下一次循环

工厂类比:质检员在流水线上发现一个次品,直接扔掉,不做任何处理,继续检查下一个。流水线没有停,只是这一件品跳过了。

csharp
// 示例:跳过不合格产品,只统计合格数量 foreach (var product in productList) { if (product.IsDefective) continue; // 跳过次品,进入下一件 qualifiedCount++; }

breakcontinue 的区别是初学者必须搞清楚的:

语句作用范围循环是否继续工厂类比
break退出整个循环❌ 停止紧急停机
continue跳过本次迭代✅ 继续跳过次品
return退出当前方法❌ 停止工人下班离岗

return:任务完成,直接交差

return 用于终止当前方法的执行,并可以返回一个值给调用者。

它不只是退出循环,而是直接退出整个方法。就像工人完成了分配的任务,直接打卡下班,不等其他人。

csharp
// 示例:在设备列表中找到第一台故障设备,立刻返回 Device FindFirstFaultyDevice(List<Device> devices) { foreach (var device in devices) { if (device.HasFault) return device; // 找到就立刻返回,后面的设备不再检查 } return null; // 没找到返回 null }

「重要原则:return 之后的代码永远不会被执行。如果你在 return 后面写了代码,VS2026 会直接给你标黄警告:Unreachable code detected。」


goto:传送门,慎用

goto 可以让程序直接跳转到代码中指定的标签位置,是四个跳转语句里最"暴力"的一个。

工厂类比:就像仓库里的传送带直通车,不走正常流程,直接从 A 点传到 D 点。

goto 在 C# 里有合理的使用场景:跳出多层嵌套循环,以及在 switch 中跳转到另一个 case

csharp
// 示例:在多层嵌套中,发现严重故障,直接跳出所有循环 for (int line = 0; line < productionLines; line++) { for (int station = 0; station < stations; station++) { if (IsCriticalFault(line, station)) goto EmergencyStop; // 跳出所有嵌套循环 } } EmergencyStop: TriggerAlarm(); // 触发报警处理

⚠️ 工程建议:除了跳出多层嵌套循环这个特定场景,平时尽量不要用 goto。滥用 goto 会让代码逻辑像意大利面条一样绕成一团,维护起来极其痛苦。


💻 VS2026 操作步骤

Step 1 新建控制台项目

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

VS2026 Copilot 辅助:创建完成后,Copilot 会自动识别 .NET 10 项目模板,并在右侧面板提示可用的 C# 14 新语法特性,直接点击"了解更多"可内联查看文档。

Step 2 输入代码并启用智能补全

Program.cs 中输入方法名或注释,Copilot 会自动预测并补全整个方法体。例如输入 // 检测设备温度是否超限,Copilot 会直接补全带 break 的循环结构,按 Tab 键接受建议。

Step 3 使用右键 Copilot 菜单解释代码

选中任意一段跳转语句代码,右键 > Copilot > 解释,Copilot 会在聊天窗口里用中文逐行解释这段代码的执行流程,非常适合初学者验证自己的理解是否正确。

Step 4 运行与调试

F5 启动调试,在 breakreturn 语句行按 F9 设置断点,用 F10 单步执行,观察程序实际跳转路径,和你预期的是否一致。


🤖 Vibe Coding 提示词写法

如果你想用 Copilot Chat 直接生成本节代码框架,可以用这个 Prompt:

用 C# 14 写一个控制台程序,模拟工厂生产线质检场景: - 用 for 循环模拟 20 个产品依次检测 - 用 continue 跳过次品(随机生成) - 用 break 在发现严重故障品时停止整条线 - 用 return 封装成一个返回合格品数量的方法 - 变量命名使用工业语义,加中文注释 - 目标框架:.NET 10,C# 14

image.png

把这段 Prompt 粘贴到 VS2026 的 Copilot Chat 窗口,30秒内你就能得到一个可直接运行的完整示例。


📋 完整代码示例

这段代码模拟了一条冲压车间生产线的质检流程,综合演示了 breakcontinuereturngoto 四个跳转语句在同一个工业场景中的实际用法。

csharp
// ============================================================ // 冲压车间质检系统 - 跳转语句综合演示 // 目标框架:.NET 10 | 语言版本:C# 14 // ============================================================ using System; using System.Collections.Generic; // 产品质检结果枚举 enum QualityResult { Qualified, // 合格 Defective, // 次品(跳过统计) CriticalFault // 严重故障(停线) } class PressShopInspector { // 报警温度阈值(摄氏度) private const double alarmThreshold = 85.0; // 模拟随机质检结果 private static readonly Random rng = new Random(42); // 模拟单个产品的质检结果 static QualityResult InspectProduct(int productId) { int roll = rng.Next(100); if (roll < 10) return QualityResult.CriticalFault; // 10% 概率严重故障 if (roll < 30) return QualityResult.Defective; // 20% 概率次品 return QualityResult.Qualified; // 70% 合格 } // 核心质检方法:返回本批次合格品数量 static int RunInspectionBatch(int batchSize) { int qualifiedCount = 0; int defectiveCount = 0; Console.WriteLine($"=== 开始检测,本批次共 {batchSize} 件产品 ===\n"); for (int productionCount = 1; productionCount <= batchSize; productionCount++) { QualityResult result = InspectProduct(productionCount); // 发现严重故障:触发停线,跳出所有循环 if (result == QualityResult.CriticalFault) { Console.WriteLine($"⛔ 产品 #{productionCount} 发现严重故障,触发紧急停线!"); goto EmergencyStop; } // 发现次品:跳过本件,继续检测下一件 if (result == QualityResult.Defective) { defectiveCount++; Console.WriteLine($"⚠️ 产品 #{productionCount} 次品,已剔除,继续检测..."); continue; } // 合格品:计数并记录 qualifiedCount++; Console.WriteLine($"✅ 产品 #{productionCount} 合格(当前合格数:{qualifiedCount})"); // 模拟设备温度监控:超温立刻停止采集 double deviceTemp = 70.0 + productionCount * 0.8; // 模拟温度逐渐升高 if (deviceTemp > alarmThreshold) { Console.WriteLine($"\n🌡️ 设备温度 {deviceTemp:F1}°C 超限(阈值 {alarmThreshold}°C),停止采集!"); break; // 退出 for 循环,不再采集后续数据 } } // 正常结束或 break 后到达此处 Console.WriteLine($"\n--- 本批次检测结束 ---"); Console.WriteLine($"合格品:{qualifiedCount} 件 | 次品:{defectiveCount} 件"); // return 直接返回合格品数量 return qualifiedCount; // goto 跳转标签:紧急停线处理 EmergencyStop: Console.WriteLine("🚨 紧急停线已触发,通知维修人员!"); Console.WriteLine($"停线前已检测合格品:{qualifiedCount} 件"); return qualifiedCount; // 返回停线前的合格品数量 } static void Main(string[] args) { Console.OutputEncoding = System.Text.Encoding.UTF8; // 支持输出表情符号 // 启动一批 20 件产品的质检任务 int totalQualified = RunInspectionBatch(20); Console.WriteLine($"\n📊 最终汇报:本次任务合格品共 {totalQualified} 件"); } }

image.png

运行后,你会在控制台看到每件产品的检测结果逐行输出:合格品打 ✅,次品打 ⚠️ 并跳过,温度超限时触发 break 停止采集,若随机触发严重故障则直接 goto 到停线处理逻辑。

整个执行流程清晰可见,四个跳转语句的实际效果一目了然。


🏭 工业实战小案例

场景任务:光伏电站有 50 台逆变器,需要扫描找出第一台功率异常(输出功率低于额定值 80%)的设备,找到就立刻上报,不再扫描剩余设备。

思路拆解:

  1. foreach 遍历逆变器列表
  2. 计算每台设备的功率比例
  3. 低于 80% 阈值时,用 return 直接返回该设备编号
  4. 全部正常则返回 -1 表示无异常
  5. 主程序根据返回值决定是否触发报警
csharp
// 光伏逆变器异常扫描 - .NET 10 / C# 14 using System; using System.Collections.Generic; class InverterScanner { // 额定功率(kW) private const double ratedPower = 100.0; // 异常功率比例阈值(低于此值视为异常) private const double powerRatioThreshold = 0.80; // 扫描并返回第一台异常逆变器的编号,无异常返回 -1 static int FindFirstAbnormalInverter(List<double> inverterOutputList) { for (int inverterId = 0; inverterId < inverterOutputList.Count; inverterId++) { double powerRatio = inverterOutputList[inverterId] / ratedPower; // 功率比例正常,continue 跳过 if (powerRatio >= powerRatioThreshold) continue; // 发现异常:立刻 return,不再扫描后续设备 Console.WriteLine($"⚡ 逆变器 #{inverterId + 1} 功率异常:" + $"{inverterOutputList[inverterId]:F1} kW({powerRatio:P0})"); return inverterId + 1; } return -1; // 全部正常 } static void Main(string[] args) { Console.OutputEncoding = System.Text.Encoding.UTF8; // 支持输出 emoji // 模拟 50 台逆变器输出(第 23 台模拟故障) var outputs = new List<double>(); var rng = new Random(7); for (int i = 0; i < 50; i++) outputs.Add(i == 22 ? 75.0 : 90.0 + rng.NextDouble() * 10); int faultyId = FindFirstAbnormalInverter(outputs); if (faultyId != -1) Console.WriteLine($"🚨 上报运维中心:逆变器 #{faultyId} 需要检查!"); else Console.WriteLine("✅ 所有逆变器运行正常"); } }

image.png

运行后控制台会输出第 23 台逆变器的功率异常信息,程序在找到第一台异常设备后立刻停止扫描,不会继续遍历剩余的 27 台设备——这正是 return 提前退出的价值所在。


⚠️ 避坑提醒

这几个坑,我替你踩过了

坑 1:以为 break 能跳出所有嵌套循环

❌ 错误做法:

csharp
for (int i = 0; i < 10; i++) for (int j = 0; j < 10; j++) if (j == 5) break; // 只退出内层,外层还在转

✅ 正确做法:用 goto 或布尔标志变量跳出多层循环

csharp
bool shouldStop = false; for (int i = 0; i < 10 && !shouldStop; i++) for (int j = 0; j < 10; j++) if (j == 5) { shouldStop = true; break; }

📌 原因:break 只对最近一层的循环或 switch 生效,多层嵌套要另想办法。


坑 2:在 void 方法里用 return 返回了一个值

❌ 错误做法:

csharp
void CheckAlarm() { return true; } // 编译报错

✅ 正确做法:

csharp
void CheckAlarm() { return; } // void 方法 return 后面不带值 bool CheckAlarm() { return true; } // 需要返回值就改方法签名

📌 原因:void 方法的 return 只表示"退出方法",不能携带返回值,两者要匹配。


坑 3:continue 写在循环外面

❌ 错误做法:

csharp
if (isDefective) continue; // 不在任何循环里,编译报错

✅ 正确做法:continue 必须写在 forwhileforeach 等循环体内部。

📌 原因:continue 的语义是"进入下一次迭代",没有循环就没有"下一次",编译器直接拒绝。


📝 本节总结

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

break 像紧急停机按钮,能立刻终止当前循环;continue 像流水线上的次品剔除动作,跳过本次、继续下一件;return 是方法级别的"任务完成离场",可以带着结果返回给调用者;goto 是跳出多层嵌套的最直接手段,但要克制使用。四个语句各司其职,组合起来能让你的工业程序流程控制精准、干净、可读。

代码写多了你会发现,真正好用的程序,不只是能跑,而是该停的地方停得干脆


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

上一节:【循环语句:for、while、do-while、foreach】

下一节:【数组:一维、多维与交错数组】(明天更新)

💬 你在工作中遇到过类似的需求吗?

欢迎在评论区说说你的场景,也许下一篇案例就来自你的留言。

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


#C#编程入门 #工业数字化 #工厂自动化 #程序员成长 #制造业数字化转型

本文作者:技术老小子

本文链接:

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