C# 判断语句详解(if、switch、三目运算符、Null 条件运算符)

在 C# 开发中,判断结构是最基础、也是最常用的控制流程之一。程序通过判断条件的真假,决定执行不同的代码逻辑。本文将系统讲解 C# 中常见的判断语句及其使用方式,并结合示例帮助理解。


一、什么是判断结构?

判断结构用于根据条件表达式(布尔值)的结果,执行不同的代码块。

其核心逻辑:

如果条件成立(true) → 执行代码A

如果条件不成立(false) → 执行代码B(可选)


二、if 语句

1️⃣ 基本 if 语句

语法格式

csharp 复制代码
if (条件表达式)
{
    // 条件为 true 时执行
}

示例

csharp 复制代码
int age = 18;

if (age >= 18)
{
    Console.WriteLine("已成年");
}

age >= 18 为 true 时,输出"已成年"。


2️⃣ if...else 语句

语法格式

csharp 复制代码
if (条件表达式)
{
    // 条件为 true
}
else
{
    // 条件为 false
}

示例

csharp 复制代码
int score = 59;

if (score >= 60)
{
    Console.WriteLine("考试通过");
}
else
{
    Console.WriteLine("考试未通过");
}

3️⃣ if...else if...else 语句

适用于多个条件判断。

示例

csharp 复制代码
int score = 85;

if (score >= 90)
{
    Console.WriteLine("优秀");
}
else if (score >= 80)
{
    Console.WriteLine("良好");
}
else if (score >= 60)
{
    Console.WriteLine("及格");
}
else
{
    Console.WriteLine("不及格");
}

执行顺序是从上到下依次判断,只要满足一个条件就不会继续往下执行。


4️⃣ 嵌套 if 语句

在 if 或 else 代码块中继续使用 if。

csharp 复制代码
int age = 20;
bool hasID = true;

if (age >= 18)
{
    if (hasID)
    {
        Console.WriteLine("允许进入");
    }
}

⚠️ 注意:嵌套层级不宜过多,否则会影响代码可读性。


三、switch 语句

当需要对一个变量进行多个固定值判断时,推荐使用 switch。

1️⃣ 基本 switch 结构

语法格式

csharp 复制代码
switch (表达式)
{
    case 值1:
        // 执行语句
        break;
    case 值2:
        // 执行语句
        break;
    default:
        // 默认执行
        break;
}

示例

csharp 复制代码
int day = 3;

switch (day)
{
    case 1:
        Console.WriteLine("星期一");
        break;
    case 2:
        Console.WriteLine("星期二");
        break;
    case 3:
        Console.WriteLine("星期三");
        break;
    default:
        Console.WriteLine("未知日期");
        break;
}

🔹 注意事项

  • 必须使用 break
  • default 类似于 else
  • 适用于固定值判断,不适用于范围判断

2️⃣ 嵌套 switch

csharp 复制代码
int category = 1;
int type = 2;

switch (category)
{
    case 1:
        switch (type)
        {
            case 1:
                Console.WriteLine("分类1-类型1");
                break;
            case 2:
                Console.WriteLine("分类1-类型2");
                break;
        }
        break;
}

四、C# Null 条件运算符(?.)

在 C# 6.0 之后引入,用于避免空引用异常。

传统写法

csharp 复制代码
if (person != null)
{
    Console.WriteLine(person.Name);
}

使用 ?. 运算符

csharp 复制代码
Console.WriteLine(person?.Name);

如果 person 为 null,则不会抛出异常,而是返回 null。

链式调用示例

csharp 复制代码
var length = person?.Name?.Length;

只要中间有一个为 null,整个表达式就会返回 null。

✅ 提高代码简洁性

✅ 减少 if 判断

✅ 避免 NullReferenceException


五、条件运算符(? :)------三目运算符

三目运算符可以替代简单的 if...else。

语法格式

csharp 复制代码
条件表达式 ? 表达式1 : 表达式2;

解释:

  • 条件为 true → 执行表达式1
  • 条件为 false → 执行表达式2

示例

csharp 复制代码
int score = 80;

string result = score >= 60 ? "及格" : "不及格";

Console.WriteLine(result);

等价于:

csharp 复制代码
string result;

if (score >= 60)
{
    result = "及格";
}
else
{
    result = "不及格";
}

多层三目运算符(不推荐)

csharp 复制代码
string grade = score >= 90 ? "A" :
               score >= 80 ? "B" :
               score >= 70 ? "C" : "D";

⚠️ 建议不要嵌套过深,影响可读性。


六、if 与 switch 如何选择?

场景 推荐使用
范围判断 if
固定值判断 switch
简单二选一 三目运算符
防止空引用 ?.

七、常见错误总结

❌ 忘记写 break

会导致 case 穿透(C# 默认不允许隐式穿透)。

❌ 使用 = 而不是 ==

csharp 复制代码
if (a = 5) // 错误

应写:

csharp 复制代码
if (a == 5)

❌ 过度嵌套

嵌套层数超过 3 层建议重构代码。


八、总结

C# 中的判断结构包括:

  • ✅ if
  • ✅ if...else
  • ✅ 嵌套 if
  • ✅ switch
  • ✅ 嵌套 switch
  • ✅ Null 条件运算符 ?.
  • ✅ 条件运算符 ? :

掌握判断结构是编写逻辑代码的基础。实际开发中应根据场景选择最合适的判断方式,同时注意代码的可读性与维护性。


如果你正在学习 C#,建议多写示例代码进行练习。

下一篇可以深入讲解:

👉 C# 循环结构(for、while、foreach)

需要我帮你写进阶版(包含模式匹配 switch 表达式、is 模式匹配、when 关键字)也可以告诉我 👍

相关推荐
csdn_aspnet2 小时前
C# 求n边凸多边形的对角线数量(Find number of diagonals in n sided convex polygon)
开发语言·算法·c#
武藤一雄6 小时前
C# 设计模式大全(第一弹|7种)
microsoft·设计模式·微软·c#·.net·.netcore
格林威7 小时前
Baumer相机锂电池极片裁切毛刺检测:防止内部短路的 5 个核心方法,附 OpenCV+Halcon 实战代码!
开发语言·人工智能·数码相机·opencv·计算机视觉·c#·视觉检测
向上的车轮8 小时前
熟悉C#如何转TypeScript——SDK与包引用
开发语言·typescript·c#
CSharp精选营9 小时前
Dispose 不释放?C# 资源泄漏的 3 种隐蔽场景排查
c#·资源泄漏
unicrom_深圳市由你创科技11 小时前
LabVIEW和C#在工业控制中的应用差异是什么?
fpga开发·c#·labview
唐青枫12 小时前
C#.NET Consul + Steeltoe 深入解析:服务注册发现、健康检查与微服务接入
c#·.net
DowneyJoy12 小时前
【Unity3D补充知识点】常用数据结构分析-集合(List<T>)
数据结构·unity·c#·list
格林威12 小时前
Baumer相机铝型材表面划伤长度测量:实现损伤量化评估的 5 个关键技术,附 OpenCV+Halcon 实战代码!
开发语言·人工智能·数码相机·opencv·计算机视觉·c#·工业相机
DowneyJoy13 小时前
【Unity3D补充知识点】常用数据结构分析-数组(Array)
数据结构·unity·c#