C# 学习笔记 03:告别 If-Else 地狱?掌握 C# 现代 Switch 魔法!
开篇:从“仓库”到“战场”
在前两期,我们学会了如何用变量(仓库)把数据存起来。但如果数据只是躺在内存里,程序就是死的。 今天要学习的是程序的灵魂——流程控制 (Control Flow) 。
就像在游戏中:
- 要刷 100 只史莱姆,难道要按 100 次攻击键吗?
当然不是!我们需要指挥棒。
第一关:命运的分岔路 (If / Else)
这是编程里最直观的逻辑:如果(条件成立),就(做这件事),否则(做那件事)。
场景模拟:皮皮在地下城遇到了怪物。
bool hasWeapon = true;
if (hasWeapon)
{
Console.WriteLine("皮皮:吃我一剑!");
}
else
{
Console.WriteLine("皮皮:溜了溜了..."); // 怂
}
这很简单,对吧?但新手最容易犯的错误是——嵌套地狱 (Arrow Code) 。 当 if 里面套 if 再套 if,代码形状就会变成一个横着的金字塔(或者波动拳),极难阅读!一定要小心!
第二关:法师的魔法书 (Switch 表达式) —— 本篇高光
假设瓜瓜(法师)要根据怪物的属性,选择不同的魔法。

1. 传统的 Switch (老古董写法)
以前的代码(C# 7 以前)又臭又长,满屏都是 case 和 break,写错一个 break 程序就崩了:
// 繁琐的旧时代写法
switch (monsterType)
{
case"Fire": spell = "冰冻术"; break;
case"Water": spell = "雷电术"; break;
default: spell = "物理敲打"; break;
}
2. 现代 Switch 表达式 (C# 8.0+ 推荐写法) ✅
来看看瓜瓜的高级魔法!现在的 C# 可以把十几行代码浓缩成几行,极其优雅:
// 丝滑的 Switch Expression
string spell = monsterType switch
{
"Fire" => "冰冻术",
"Water" => "雷电术",
_ => "物理敲打"// "_" 代表 default
};
划重点:
第三关:无尽的史莱姆 (Loops)
有时候,我们需要重复做同一件事,比如“打 10 只史莱姆升级”。
1. while 循环 (如果不小心,就是无限地狱)
int slimes = 0;
while (slimes < 10)
{
Console.WriteLine($"打倒第 {slimes + 1} 只史莱姆");
slimes++; // 假如你忘了这行...
}
⚠️ 踩坑警示: 如果忘记写 slimes++,条件永远成立,程序就会陷入死循环 (Infinite Loop) ,被困在时间循环里,跑到累死也出不来!
2. foreach 循环 (懒人福音,未来最常用)
如果我们有一个怪物列表,想一个个打过去,用 foreach 最舒服,不需要管下标,也不会死循环:
string[] monsters = { "史莱姆", "哥布林", "巨龙" };
foreach (var m in monsters)
{
Console.WriteLine($"挑战:{m}");
}
总结与思考
今天我们把数据连成了线:
课后思考:在 switch 表达式中,如果不写 _ (default) 这一行,万一来了个未知的怪物类型,程序会发生什么?
下期预告:现在的代码都是堆在 Main 函数里的,像一团乱麻。随着皮皮学会的技能越来越多,我们需要整理术!下一期,我们将学习如何把功能封装成神奇的“技能胶囊” (Method) !