C# 判断语句详解

在 C# 中,判断语句用于根据条件执行不同的代码逻辑,常见的有:

  • if
  • if...else
  • if...else if...else
  • switch
  • 三元运算符 ?:
  • 模式匹配(C# 7.0+)

1. if 语句

最基本的条件判断。

cs 复制代码
int age = 20;

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

执行流程:

复制代码
条件成立(True) → 执行代码块
条件不成立(False) → 跳过代码块

2. if...else

二选一判断。

cs 复制代码
int score = 50;

if (score >= 60)
{
    Console.WriteLine("及格");
}
else
{
    Console.WriteLine("不及格");
}

输出:

复制代码
不及格

3. if...else if...else

多条件判断。

cs 复制代码
int score = 85;

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

输出:

复制代码
良好

执行特点:

  • 从上往下依次判断
  • 满足一个条件后立即结束
  • 后续条件不再检查

4. 逻辑运算符

&&(并且)

两个条件都成立。

cs 复制代码
int age = 20;
bool vip = true;

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

||(或者)

满足一个即可。

cs 复制代码
bool admin = false;
bool manager = true;

if (admin || manager)
{
    Console.WriteLine("有权限");
}

!(取反)

复制代码
bool isLogin = false;

if (!isLogin)
{
    Console.WriteLine("请先登录");
}

5. switch 语句

适用于多个固定值判断。

cs 复制代码
int day = 3;

switch (day)
{
    case 1:
        Console.WriteLine("星期一");
        break;

    case 2:
        Console.WriteLine("星期二");
        break;

    case 3:
        Console.WriteLine("星期三");
        break;

    default:
        Console.WriteLine("未知");
        break;
}

输出:

复制代码
星期三

6. switch 表达式(C# 8.0+)

更加简洁。

cs 复制代码
int score = 85;

string result = score switch
{
    >= 90 => "优秀",
    >= 80 => "良好",
    >= 60 => "及格",
    _ => "不及格"
};

Console.WriteLine(result);

输出:

复制代码
良好

7. 三元运算符

简化的 if...else。

语法:

复制代码
条件 ? 值1 : 值2

示例:

cs 复制代码
int age = 20;

string msg = age >= 18 ? "成年人" : "未成年人";

Console.WriteLine(msg);

等价于:

cs 复制代码
string msg;

if (age >= 18)
{
    msg = "成年人";
}
else
{
    msg = "未成年人";
}

8. 模式匹配(Pattern Matching)

C# 新版本非常常用。

类型判断

cs 复制代码
object obj = "Hello";

if (obj is string str)
{
    Console.WriteLine(str.Length);
}

输出:

复制代码
5

范围判断

cs 复制代码
int score = 88;

if (score is >= 80 and < 90)
{
    Console.WriteLine("良好");
}

多条件匹配

cs 复制代码
int age = 25;

if (age is > 18 and < 60)
{
    Console.WriteLine("成年人");
}

9. null 判断

传统写法

cs 复制代码
string name = null;

if (name != null)
{
    Console.WriteLine(name);
}

推荐写法

cs 复制代码
if (name is not null)
{
    Console.WriteLine(name);
}

10. 空条件运算符

避免空引用异常。

cs 复制代码
Person p = null;

Console.WriteLine(p?.Name);

等价于:

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

11. 实际开发案例

用户登录判断

cs 复制代码
string userName = "admin";
string password = "123456";

if (userName == "admin" &&
    password == "123456")
{
    Console.WriteLine("登录成功");
}
else
{
    Console.WriteLine("用户名或密码错误");
}

成绩等级判断

cs 复制代码
int score = 92;

string level = score switch
{
    >= 90 => "A",
    >= 80 => "B",
    >= 70 => "C",
    >= 60 => "D",
    _ => "E"
};

Console.WriteLine(level);

12. 常见错误

错误1:使用赋值符号

cs 复制代码
if (a = 10)
{
}

正确:

cs 复制代码
if (a == 10)
{
}

错误2:遗漏花括号

cs 复制代码
if (age > 18)
    Console.WriteLine("成年");
    Console.WriteLine("欢迎");

实际上:

cs 复制代码
if (age > 18)
{
    Console.WriteLine("成年");
}

Console.WriteLine("欢迎");

推荐始终使用 {}

cs 复制代码
if (age > 18)
{
    Console.WriteLine("成年");
    Console.WriteLine("欢迎");
}

判断语句选择建议

场景 推荐
单条件判断 if
两种结果 if...else
多范围判断 if...else if
固定值匹配 switch
简单赋值 ?:
类型判断 is
范围匹配 switch 表达式 + Pattern Matching
空值判断 is not null、?.

对于现代 C#(C# 8~12),推荐优先使用 switch 表达式 + 模式匹配(Pattern Matching),代码更简洁、可读性更高。