C# 控制语句 - 条件分支

5.1 if 语句

基本语法

1
2
3
4
if (条件)
{
// 条件为 true 时执行
}

示例

1
2
3
4
5
6
7
8
9
10
int age = 20;

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

// 单行可省略大括号
if (age >= 18)
Console.WriteLine("已成年");

5.2 if-else 语句

1
2
3
4
5
6
7
8
if (条件)
{
// 条件为 true 时执行
}
else
{
// 条件为 false 时执行
}

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int score = 75;

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

// 判断奇偶数
int number = 7;
if (number % 2 == 0)
Console.WriteLine("偶数");
else
Console.WriteLine("奇数");

5.3 if-else if-else 语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if (条件 1)
{
// 条件 1 为 true
}
else if (条件 2)
{
// 条件 2 为 true
}
else if (条件 3)
{
// 条件 3 为 true
}
else
{
// 所有条件都为 false
}

示例:成绩等级

1
2
3
4
5
6
7
8
9
10
11
12
int score = 85;

if (score >= 90)
Console.WriteLine("A");
else if (score >= 80)
Console.WriteLine("B");
else if (score >= 70)
Console.WriteLine("C");
else if (score >= 60)
Console.WriteLine("D");
else
Console.WriteLine("F");

5.4 嵌套 if 语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int age = 25;
bool hasTicket = true;

if (hasTicket)
{
if (age >= 18)
{
Console.WriteLine("可以入场");
}
else
{
Console.WriteLine("需要家长陪同");
}
}
else
{
Console.WriteLine("请先购票");
}

5.5 switch 语句

基本语法

1
2
3
4
5
6
7
8
9
10
11
12
switch (表达式)
{
case1:
// 执行代码
break;
case2:
// 执行代码
break;
default:
// 默认代码
break;
}

示例:星期判断

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
int day = 3;

switch (day)
{
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:
case 7:
Console.WriteLine("周末");
break;
default:
Console.WriteLine("无效的日期");
break;
}

5.6 switch 表达式(C# 8+)

基本语法

1
2
3
4
5
6
变量 = 表达式 switch
{
1 => 结果 1,
2 => 结果 2,
_ => 默认结果
};

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
int day = 3;
string dayName = day switch
{
1 => "星期一",
2 => "星期二",
3 => "星期三",
4 => "星期四",
5 => "星期五",
6 or 7 => "周末",
_ => "无效的日期"
};

Console.WriteLine(dayName); // 星期三

5.7 模式匹配(C# 7+)

类型模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
object obj = GetObject();

switch (obj)
{
case string s:
Console.WriteLine($"字符串: {s}");
break;
case int i:
Console.WriteLine($"整数: {i}");
break;
case null:
Console.WriteLine("空值");
break;
default:
Console.WriteLine("其他类型");
break;
}

when 条件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
switch (score)
{
case >= 90:
Console.WriteLine("A");
break;
case >= 80 when score < 90:
Console.WriteLine("B");
break;
case >= 60:
Console.WriteLine("及格");
break;
default:
Console.WriteLine("不及格");
break;
}

5.8 三元运算符

语法

1
条件 ? 值 1 : 值 2

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
int age = 20;
string status = age >= 18 ? "成年" : "未成年";

// 嵌套三元运算符
int score = 75;
string grade = score >= 90 ? "A" :
score >= 80 ? "B" :
score >= 70 ? "C" :
score >= 60 ? "D" : "F";

// 空值检查
string name = userInput;
string displayName = string.IsNullOrEmpty(name) ? "匿名用户" : name;

5.9 最佳实践

1. 卫语句减少嵌套

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 不推荐
void ProcessOrder(Order order)
{
if (order != null)
{
if (order.IsPaid)
{
if (order.HasStock)
{
Ship(order);
}
}
}
}

// 推荐:卫语句
void ProcessOrder(Order order)
{
if (order == null) return;
if (!order.IsPaid) return;
if (!order.HasStock) return;

Ship(order);
}

2. 使用 switch 表达式简化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 不推荐
string GetDayName(int day)
{
if (day == 1) return "星期一";
if (day == 2) return "星期二";
// ...
return "未知";
}

// 推荐
string GetDayName(int day) => day switch
{
1 => "星期一",
2 => "星期二",
3 => "星期三",
4 => "星期四",
5 => "星期五",
6 or 7 => "周末",
_ => "未知"
};

5.10 本章小结

  • if 用于单条件,if-else 用于双条件
  • if-else if-else 用于多条件分支
  • switch 用于多值匹配,必须使用 break
  • C# 8+ 支持 switch 表达式,更简洁
  • 模式匹配支持类型检查和 when 条件
  • 三元运算符:条件 ? 值 1 : 值 2
  • 使用卫语句减少嵌套

练习题

  1. 编写程序:输入月份,输出季节
  2. 使用 switch 表达式实现简单计算器
  3. 判断闰年(能被 4 整除但不能被 100 整除,或能被 400 整除)
  4. 以下代码输出什么?
    1
    2
    3
    4
    5
    6
    7
    int x = 10;
    if (x > 5)
    Console.WriteLine("A");
    else if (x > 8)
    Console.WriteLine("B");
    else
    Console.WriteLine("C");
ByteFisher
分享编程技术 · 记录钓鱼乐趣
扫码关注
▸ 扫码关注 ◂
分享: