程序默认是顺序执行:从上到下一行一行依次运行。判断(分支语句):允许程序根据条件真假,选择执行不同代码。条件表达式结果必须是
bool(true/false)。
C# 判断分支一共 3 类:
if单分支if ... else ...双分支if ... else if ... else多分支switch多分支匹配(适合固定值匹配) 还有简化写法:三元运算符?:(上一节运算符学过,属于表达式分支)
学习路线:
- if 单分支
- if else 双分支
- if else if else 多分支
- 嵌套 if
- switch 语句(含 break、default)
- switch 表达式(C#8+,拓展)
- 代码块作用域、新手高频坑
- 实战练习
1 if 单分支:满足条件才执行
语法:
if (布尔条件) { // 条件为 true 时,才执行这里代码 } // 条件false,直接跳过大括号,往下执行重点:
if后面括号必须是 bool 表达式,不能写数字(C# 不允许像 C 语言那样直接写 if (1))。
示例 1:基础 if
using System; namespace IfDemo { class Program { static void Main(string[] args) { int age = 20; if (age >= 18) { Console.WriteLine("你已经成年"); } Console.WriteLine("程序结束"); } } }机理拆解
- 执行到
if (age >=18):先计算括号内表达式。20>=18→true - 条件为 true:进入
{},执行打印 “你已经成年” - 大括号执行完毕,跳出,继续执行后面
Console.WriteLine("程序结束")
修改 age=16:
age>=18→ false,直接跳过{}里面全部代码,直接打印程序结束。
⚠️ 小知识点:如果 if 后面只有一行代码,大括号
{}可以省略。
if(age >=18) Console.WriteLine("成年"); //只有这一行属于if Console.WriteLine("永远会执行"); //不属于if✅新手强烈建议永远写大括号,防止后续增加代码出现隐藏 bug。
2 if ... else ... 双分支:二选一
语法:
if (条件) { // true执行 } else { // false执行 }两个分支一定只会走其中一条,不可能同时执行。
示例:判断分数及格不及格
static void Main() { int score = 55; if (score >= 60) { Console.WriteLine("及格"); } else { Console.WriteLine("不及格"); } }机理拆解
- 计算
score >=60,55>=60 → false - 不进入 if 块,直接跳去执行
else大括号代码,打印 “不及格” - 两个分支执行完,汇合到后面代码。
对比:三元运算符
string res = score >=60 ? "及格":"不及格";三元是表达式,返回一个值;if else 是语句,可以写多行代码。 如果只是简单赋值,三元简洁;分支里面有多行逻辑,必须用 if else。
#3 if ... else if ... else 多分支:多选一 语法:
if(条件1) { //条件1成立执行 } else if(条件2) { //条件1不成立,条件2成立执行 } else if(条件3) { //条件1、2都不成立,条件3成立执行 } else { //上面所有条件都不成立,执行else(可选,可以省略) }规则:从上往下依次判断。一旦找到第一个 true 条件,执行对应代码块,然后整个 if 结构直接结束,后面 else if 不再判断!
示例:分数评级
static void Main() { int score = 85; if (score >= 90) { Console.WriteLine("优秀"); } else if (score >= 80) { Console.WriteLine("良好"); } else if (score >= 60) { Console.WriteLine("及格"); } else { Console.WriteLine("不及格"); } }机理拆解
score=85:
- 判断
score>=90→ false,跳过这个代码块 - 判断
score>=80→ true,执行打印 “良好” - 整个 if 多分支直接结束,后面
else if、else 不再判断。
✅ 书写顺序很关键!不能把条件写反。 ❌错误写法:把
score>=60放最前面,95 分会匹配到 >=60,直接判定及格。
//错误示范!顺序不对逻辑错误 if(score >=60){...} else if(score >=80){...}#4 嵌套 if:if 里面再写 if
在 if/else 的大括号内部,继续写 if 判断。适合多层条件(先满足大前提,再判断细节)
示例:判断成年并且有驾照
static void Main() { int age = 22; bool hasDriverLicense = true; if (age >= 18) { Console.WriteLine("年龄成年"); //嵌套if if (hasDriverLicense == true) { Console.WriteLine("可以开车"); } else { Console.WriteLine("成年但是没有驾照,不能开车"); } } else { Console.WriteLine("未成年,不能开车"); } }机理: 外层 if 先判断年龄。只有年龄 >=18,才会进入外层 {},然后执行里面嵌套的驾照判断。
嵌套层数不要太深,一般不超过 2~3 层,否则代码可读性差。
#5 switch 语句:固定值匹配分支
if 适合范围判断(age>18,score>=60); switch 适合判断变量等于某个固定离散值(等于 1、等于 2、等于 "张三")。
语法:
switch(待匹配变量) { case 值1: 代码; break; //⭐必须写break,跳出switch case 值2: 代码; break; default: //可选,所有case都不匹配时执行,相当于else 代码; break; }C# switch 要求:每个 case 末尾必须有跳转语句(break /return),防止 case 穿透(默认不允许穿透,和 C 语言不一样)
示例:根据数字输出星期
static void Main() { int week = 3; switch (week) { case 1: Console.WriteLine("周一"); break; case 2: Console.WriteLine("周二"); break; case 3: Console.WriteLine("周三"); break; case 4: Console.WriteLine("周四"); break; case 5: Console.WriteLine("周五"); break; case 6: Console.WriteLine("周六"); break; case 7: Console.WriteLine("周日"); break; default: Console.WriteLine("输入数字无效"); break; } }机理拆解
week=3,进入 switch,拿 week 的值依次和 case 后面常量对比;- 匹配
case3,执行打印周三; - 遇到
break,立刻跳出整个 switch 结构,后面 case 不再判断。
case 合并(多个值执行相同代码)
int week = 6; switch (week) { case 1: case 2: case 3: case 4: case 5: Console.WriteLine("工作日"); break; case 6: case 7: Console.WriteLine("休息日"); break; default: Console.WriteLine("无效"); break; }week=6,匹配 case6,执行休息日。多个 case 堆叠在一起实现多值匹配。
switch 支持匹配类型:int、string、char、枚举等;不能直接写范围(case > 60 不行)。范围判断优先 if else if。
拓展:switch 表达式(C#8 及以上,简洁返回值)
int week = 2; string result = week switch { 1 => "周一", 2 => "周二", 3 => "周三", _ => "无效" //_代表default }; Console.WriteLine(result);适合只需要返回一个结果的场景。
6 条件组合:逻辑运算符 && || ! 在 if 中的使用
多个条件同时判断,搭配上一节学的逻辑运算符。
示例:同时满足两个条件(&& 并且)
int age = 20; int height = 165; if(age >=18 && height >=160) { Console.WriteLine("满足报名条件"); }条件:年龄≥18并且身高≥160,两者同时成立。
示例:满足任意一个条件(|| 或者)
bool isVip = true; int score = 95; if(isVip || score >=90) { Console.WriteLine("获得奖励"); }VIP 或者分数≥90,满足其一即可。
示例:逻辑非!
bool isRain = false; if(!isRain) { Console.WriteLine("不下雨,可以出门"); }再次提醒:C#不能写连续比较!
int age = 20; // if(18 < age < 30) ❌编译报错 if(age>18 && age<30) ✅正确写法#7 作用域问题(新手高频坑){}大括号划分变量作用域:在 if /else 里面定义的变量,外面访问不到
static void Main() { int score = 80; if(score >=60) { string msg = "及格"; //msg只在if大括号内部 Console.WriteLine(msg); } // Console.WriteLine(msg); //编译报错!msg超出作用域 }解决办法:变量定义在 if 外面。
#8 新手高频坑汇总
- if 括号里面必须是 bool 表达式,不能直接写数字
if(5)(C# 不允许)。 =是赋值,==是相等判断!极易写错:if(age=18)编译报错 / 逻辑错误。- else if 顺序很重要,条件范围大的放后面,小范围放前面。
- switch 每个 case 后面必须写 break,否则编译报错(C# 不允许默认穿透)。
- if 后面少写大括号,只紧跟一行代码属于 if,后续代码不属于 if,容易出现 bug。
- 多条件判断记得
&&||,禁止连续比较写法。 - if 嵌套不要太深,可读性差;固定离散值优先 switch,范围判断优先 if。