CSharp(十二) 分支语句
C# 中的 分支语句 (Selection Statements)用于根据条件判断执行不同的代码路径,主要包括 if 语句和 switch 语句。
if 语句
简单的if语句
int age = 20;
if (age >= 18)
{
Console.WriteLine("已成年");
}
if-else 语句
int score = 75;
if (score >= 60)
{
Console.WriteLine("及格");
}
else
{
Console.WriteLine("不及格");
}
if-else,if-else多分枝
int score = 85;
if (score >= 90)
{
Console.WriteLine("优秀");
}
else if (score >= 80)
{
Console.WriteLine("良好");
}
else if (score >= 70)
{
Console.WriteLine("中等");
}
else if (score >= 60)
{
Console.WriteLine("及格");
}
else
{
Console.WriteLine("不及格");
}
嵌套if语句
bool isVip = true;
int amount = 500;
if (isVip)
{
if (amount > 300)
{
Console.WriteLine("VIP享受8折优惠");
}
else
{
Console.WriteLine("VIP享受9折优惠");
}
}
else
{
Console.WriteLine("普通用户无折扣");
}
三元运算符(简化版if-else)
int a = 10, b = 20;
int max = (a > b) ? a : b; // max = 20
string result = (age >= 18) ? "成年" : "未成年";
switch 语句
基本语法
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;
default:
Console.WriteLine("周末");
break;
}
合并case(穿透)
char grade = 'B';
switch (grade)
{
case 'A':
case 'B':
case 'C':
Console.WriteLine("通过");
break;
case 'D':
Console.WriteLine("不及格");
break;
default:
Console.WriteLine("无效成绩");
break;
}
使用switch表达式(C#8.0)
// 更简洁的写法
int day = 3;
string dayName = day switch
{
1 => "星期一",
2 => "星期二",
3 => "星期三",
4 => "星期四",
5 => "星期五",
_ => "周末" // _ 相当于 default
};
模式匹配(C#7.0)
object obj = 123;
switch (obj)
{
case int i when i > 100:
Console.WriteLine($"大整数: {i}");
break;
case int i:
Console.WriteLine($"整数: {i}");
break;
case string s:
Console.WriteLine($"字符串: {s}");
break;
case null:
Console.WriteLine("空值");
break;
default:
Console.WriteLine("未知类型");
break;
}
if vs switch 选择
| 场景 | 推荐语句 | 原因 |
|---|---|---|
| 区间判断(如 > , < ) | if | switch 不支持范围 |
| 固定值判断(如枚举、常量) | switch | 更清晰、效率更高 |
| 多条件组合 | if | 更灵活 |
| 类型判断 | switch + 模式匹配 | 代码更简洁 |
完整示例
using System;
class Program
{
static void Main()
{
Console.Write("请输入月份(1-12): ");
int month = int.Parse(Console.ReadLine());
// 判断季节
string season;
if (month >= 3 && month <= 5)
{
season = "春季";
}
else if (month >= 6 && month <= 8)
{
season = "夏季";
}
else if (month >= 9 && month <= 11)
{
season = "秋季";
}
else if (month == 12 || month == 1 || month == 2)
{
season = "冬季";
}
else
{
season = "无效月份";
}
Console.WriteLine($"季节: {season}");
// 使用 switch 判断天数
int days = month switch
{
1 or 3 or 5 or 7 or 8 or 10 or 12 => 31,
4 or 6 or 9 or 11 => 30,
2 => 28,
_ => 0
};
Console.WriteLine($"天数: {days}");
}
}
总结
- if 适合条件判断和范围检查
- switch 适合固定值判断和类型判断
- C# 8.0+ 的 switch 表达式让代码更简洁
- 模式匹配让 switch 可以处理类型判断