程序默认是顺序执行 :从上到下一行一行依次运行。 判断(分支语句) :允许程序根据条件真假,选择执行不同代码 。条件表达式结果必须是
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 单分支:满足条件才执行
语法:
cs
if (布尔条件)
{
// 条件为 true 时,才执行这里代码
}
// 条件false,直接跳过大括号,往下执行
重点:
if后面括号必须是 bool 表达式,不能写数字(C# 不允许像 C 语言那样直接写 if (1))。
示例 1:基础 if
cs
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 后面只有一行代码 ,大括号
{}可以省略。
cs
if(age >=18)
Console.WriteLine("成年"); //只有这一行属于if
Console.WriteLine("永远会执行"); //不属于if
✅ 新手强烈建议永远写大括号,防止后续增加代码出现隐藏 bug。
2 if ... else ... 双分支:二选一
语法:
cs
if (条件)
{
// true执行
}
else
{
// false执行
}
两个分支一定只会走其中一条,不可能同时执行。
示例:判断分数及格不及格
cs
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 多分支:多选一 语法:
cs
if(条件1)
{
//条件1成立执行
}
else if(条件2)
{
//条件1不成立,条件2成立执行
}
else if(条件3)
{
//条件1、2都不成立,条件3成立执行
}
else
{
//上面所有条件都不成立,执行else(可选,可以省略)
}
规则:从上往下依次判断。一旦找到第一个 true 条件,执行对应代码块,然后整个 if 结构直接结束,后面 else if 不再判断!
示例:分数评级
cs
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,直接判定及格。
cs
//错误示范!顺序不对逻辑错误
if(score >=60){...}
else if(score >=80){...}
#4 嵌套 if:if 里面再写 if
在 if/else 的大括号内部,继续写 if 判断。适合多层条件(先满足大前提,再判断细节)
示例:判断成年并且有驾照
cs
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、等于 "张三")。
语法:
cs
switch(待匹配变量)
{
case 值1:
代码;
break; //⭐必须写break,跳出switch
case 值2:
代码;
break;
default: //可选,所有case都不匹配时执行,相当于else
代码;
break;
}
C# switch 要求:每个 case 末尾必须有跳转语句(break /return),防止 case 穿透(默认不允许穿透,和 C 语言不一样)
示例:根据数字输出星期
cs
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 合并(多个值执行相同代码)
cs
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 及以上,简洁返回值)
cs
int week = 2;
string result = week switch
{
1 => "周一",
2 => "周二",
3 => "周三",
_ => "无效" //_代表default
};
Console.WriteLine(result);
适合只需要返回一个结果的场景。
6 条件组合:逻辑运算符 && || ! 在 if 中的使用
多个条件同时判断,搭配上一节学的逻辑运算符。
示例:同时满足两个条件(&& 并且)
cs
int age = 20;
int height = 165;
if(age >=18 && height >=160)
{
Console.WriteLine("满足报名条件");
}
条件:年龄≥18 并且身高≥160,两者同时成立。
示例:满足任意一个条件(|| 或者)
cs
bool isVip = true;
int score = 95;
if(isVip || score >=90)
{
Console.WriteLine("获得奖励");
}
VIP 或者分数≥90,满足其一即可。
示例:逻辑非!
cs
bool isRain = false;
if(!isRain)
{
Console.WriteLine("不下雨,可以出门");
}
再次提醒:C#不能写连续比较!
cs
int age = 20;
// if(18 < age < 30) ❌编译报错
if(age>18 && age<30) ✅正确写法
#7 作用域问题(新手高频坑) {}大括号划分变量作用域:在 if /else 里面定义的变量,外面访问不到
cs
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。