☰
C# 系列教程_7 判断语句(分支)保姆级精讲
2026/11/6 3:31:35 网站建设 项目流程

程序默认是顺序执行:从上到下一行一行依次运行。判断(分支语句):允许程序根据条件真假,选择执行不同代码。条件表达式结果必须是bool(true/false)。

C# 判断分支一共 3 类:

  1. if单分支
  2. if ... else ...双分支
  3. if ... else if ... else多分支
  4. switch多分支匹配(适合固定值匹配) 还有简化写法:三元运算符?:(上一节运算符学过,属于表达式分支)

学习路线:

  1. if 单分支
  2. if else 双分支
  3. if else if else 多分支
  4. 嵌套 if
  5. switch 语句(含 break、default)
  6. switch 表达式(C#8+,拓展)
  7. 代码块作用域、新手高频坑
  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("程序结束"); } } }

机理拆解

  1. 执行到if (age >=18):先计算括号内表达式。20>=18→true
  2. 条件为 true:进入{},执行打印 “你已经成年”
  3. 大括号执行完毕,跳出,继续执行后面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("不及格"); } }

机理拆解

  1. 计算score >=60,55>=60 → false
  2. 不进入 if 块,直接跳去执行else大括号代码,打印 “不及格”
  3. 两个分支执行完,汇合到后面代码。

对比:三元运算符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:

  1. 判断score>=90→ false,跳过这个代码块
  2. 判断score>=80→ true,执行打印 “良好”
  3. 整个 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; } }

机理拆解

  1. week=3,进入 switch,拿 week 的值依次和 case 后面常量对比;
  2. 匹配case3,执行打印周三;
  3. 遇到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 新手高频坑汇总

  1. if 括号里面必须是 bool 表达式,不能直接写数字if(5)(C# 不允许)。
  2. =是赋值,==是相等判断!极易写错:if(age=18)编译报错 / 逻辑错误。
  3. else if 顺序很重要,条件范围大的放后面,小范围放前面。
  4. switch 每个 case 后面必须写 break,否则编译报错(C# 不允许默认穿透)。
  5. if 后面少写大括号,只紧跟一行代码属于 if,后续代码不属于 if,容易出现 bug。
  6. 多条件判断记得&&||,禁止连续比较写法。
  7. if 嵌套不要太深,可读性差;固定离散值优先 switch,范围判断优先 if。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询