1. 概述
switch-case语句是一种多分支选择结构,用于根据表达式的值选择执行不同的代码块。与if-else if-else语句相比,switch-case在处理多个固定值时更加简洁和高效。
2. 基本语法
switch-case语句的基本语法如下:
switch (表达式)
{
case 值1:
// 当表达式等于值1时执行的代码
break;
case 值2:
// 当表达式等于值2时执行的代码
break;
case 值3:
// 当表达式等于值3时执行的代码
break;
default:
// 当表达式不等于任何case值时执行的代码
break;
}
其中:
- 表达式:必须是一个可以求值为整数、字符、字符串或枚举类型的表达式
- case:每个case后面跟着一个常量值,用于与表达式进行比较
- break:用于退出switch语句,防止代码继续执行到下一个case
- default:可选的,当没有匹配的case时执行
3. 基本用法示例
示例:根据星期几显示不同的消息
int dayOfWeek = 3; // 假设是星期三
switch (dayOfWeek)
{
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;
}
4. 支持的数据类型
C#中的switch语句支持以下数据类型:
| 数据类型 | 示例 | 说明 |
|---|---|---|
| 整数类型 | int, byte, short, long | case值必须是整数常量 |
| 字符类型 | char | case值必须是字符常量 |
| 字符串类型 | string | case值必须是字符串常量 |
| 枚举类型 | enum | case值必须是枚举成员 |
| 布尔类型 | bool | C# 7.0+ 支持 |
5. 多个case共享代码块
当多个case需要执行相同的代码时,可以将它们放在一起,省略break语句:
示例:根据月份判断季节
int month = 6;
string season;
switch (month)
{
case 12:
case 1:
case 2:
season = "冬季";
break;
case 3:
case 4:
case 5:
season = "春季";
break;
case 6:
case 7:
case 8:
season = "夏季";
break;
case 9:
case 10:
case 11:
season = "秋季";
break;
default:
season = "无效的月份";
break;
}
Console.WriteLine($"{month}月是{season}");
6. 字符串类型的switch-case
C#支持在switch语句中使用字符串类型:
示例:根据命令执行不同操作
string command = "save";
switch (command.ToLower())
{
case "new":
Console.WriteLine("创建新文件");
break;
case "open":
Console.WriteLine("打开文件");
break;
case "save":
Console.WriteLine("保存文件");
break;
case "exit":
Console.WriteLine("退出程序");
break;
default:
Console.WriteLine("未知命令");
break;
}
7. 枚举类型的switch-case
枚举类型特别适合使用switch-case语句:
示例:根据颜色枚举显示信息
enum Color { Red, Green, Blue, Yellow }
Color selectedColor = Color.Green;
switch (selectedColor)
{
case Color.Red:
Console.WriteLine("红色:热情、危险");
break;
case Color.Green:
Console.WriteLine("绿色:自然、安全");
break;
case Color.Blue:
Console.WriteLine("蓝色:冷静、信任");
break;
case Color.Yellow:
Console.WriteLine("黄色:快乐、警告");
break;
default:
Console.WriteLine("未知颜色");
break;
}
8. switch表达式(C# 8.0+)
C# 8.0引入了更简洁的switch表达式语法:
示例:使用switch表达式
int dayOfWeek = 3;
string message = dayOfWeek switch
{
1 => "星期一:开始新的一周",
2 => "星期二:工作继续",
3 => "星期三:一周过半",
4 => "星期四:期待周末",
5 => "星期五:周末即将到来",
6 => "星期六:享受周末",
7 => "星期日:准备新的一周",
_ => "无效的星期数"
};
Console.WriteLine(message);
9. 常见错误与注意事项
错误1:忘记break语句
错误示例:
switch (x)
{
case 1:
Console.WriteLine("值为1");
// 缺少break语句
case 2:
Console.WriteLine("值为2");
break;
}
正确做法:每个case块(除了共享代码块的情况)都必须以break、return、goto或throw结束。
错误2:case值重复
错误示例:
switch (x)
{
case 1:
Console.WriteLine("值为1");
break;
case 1: // 重复的case值
Console.WriteLine("值还是1");
break;
}
正确做法:每个case值必须是唯一的。
错误3:使用变量作为case值
错误示例:
int value = 5;
int caseValue = 10;
switch (value)
{
case caseValue: // 错误:case值必须是常量
Console.WriteLine("匹配");
break;
}
正确做法:case值必须是编译时常量。
10. 与if-else语句的比较
| 特性 | switch-case | if-else |
|---|---|---|
| 适用场景 | 基于单个变量的多个固定值 | 复杂的条件表达式 |
| 可读性 | 在处理多个固定值时更清晰 | 在复杂条件时可能更直观 |
| 性能 | 通常更快(使用跳转表) | 需要逐个判断条件 |
| 灵活性 | 只能比较相等性 | 支持各种比较运算符 |
11. 完整示例程序
下面是一个完整的示例程序,演示switch-case语句的各种用法:
using System;
namespace SwitchCaseExample
{
class Program
{
static void Main(string[] args)
{
// 示例1:根据成绩显示等级
Console.WriteLine("=== 成绩等级判断 ===");
int score = 85;
switch (score / 10)
{
case 10:
case 9:
Console.WriteLine("优秀");
break;
case 8:
Console.WriteLine("良好");
break;
case 7:
case 6:
Console.WriteLine("及格");
break;
default:
Console.WriteLine("不及格");
break;
}
// 示例2:根据用户选择执行操作
Console.WriteLine("\n=== 菜单选择 ===");
Console.WriteLine("1. 新建文件");
Console.WriteLine("2. 打开文件");
Console.WriteLine("3. 保存文件");
Console.WriteLine("4. 退出");
int choice = 2; // 假设用户选择2
switch (choice)
{
case 1:
Console.WriteLine("执行新建文件操作");
break;
case 2:
Console.WriteLine("执行打开文件操作");
break;
case 3:
Console.WriteLine("执行保存文件操作");
break;
case 4:
Console.WriteLine("程序退出");
break;
default:
Console.WriteLine("无效选择");
break;
}
Console.WriteLine("\n按任意键退出...");
Console.ReadKey();
}
}
}
12. 总结
通过本教程,您应该已经掌握了C#中switch-case语句的完整使用方法。switch-case是处理多分支选择的强大工具,特别适合以下场景:
- 基于单个变量的多个固定值进行选择
- 需要处理枚举类型的情况
- 菜单选择、状态机等应用场景
在使用switch-case时,需要注意以下几点:
- 确保每个case块都有适当的退出语句(break、return等)
- case值必须是编译时常量
- 合理使用default分支处理未预料的情况
- 在C# 8.0+中可以考虑使用更简洁的switch表达式
掌握switch-case语句的使用,将使您的代码更加清晰、高效和易于维护。