C# 系列教程_7 判断语句(分支)保姆级精讲

程序默认是顺序执行 :从上到下一行一行依次运行。 判断(分支语句) :允许程序根据条件真假,选择执行不同代码 。条件表达式结果必须是 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 单分支:满足条件才执行

语法:

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("程序结束");
        }
    }
}

机理拆解

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

机理拆解

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

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

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

机理拆解

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

  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。
相关推荐
apcipot_rain9 分钟前
C++转Java日记(02)
java·开发语言·c++
杜 硕32 分钟前
从零开始的C++生活——第七讲——02
开发语言·c++·生活
zhanghaha131434 分钟前
C# 系列教程_8 循环语句 保姆级精讲(面向新手)
开发语言·c#
麦麦麦当劳大王9 小时前
【油猴脚本】Boss直聘 岗位职责复制
开发语言·前端·javascript
starzy19909 小时前
深入理解Scala Map:从实现原理到工程实践
开发语言·后端·scala
rockey62710 小时前
AScript之LINQ扩展
c#·.net·script·动态脚本
只睡四小时10 小时前
Three.js Sub-tick:漏判 60.7%→0
开发语言·javascript·性能优化·ecmascript·游戏开发·three.js·碰撞检测
码农小河6610 小时前
基于SSM+JSP的高校专业信息管理系统【附源码+数据库】
java·开发语言·数据库
东鹏特饮12 小时前
系统运维(传统/通用运维)面试题
开发语言·php