练习 - 实现 switch 语句
- 11 分钟
语句 switch 是 C# 选择语句,提供分支构造的 if-elseif-else 替代方法。 在将单个值与已知匹配值列表进行对比时,该 switch 语句比 if-elseif-else 构造更具优势。
请考虑以下方案:
- 你正在研究与食物营养相关的应用程序。 代码的一部分处理水果。
- 代码包含一个名为
fruit的变量,用于保存不同类型的水果名称。 - 你有一个列表,其中包含应用程序关注的 20 个水果。
- 你希望根据分配给
fruit的值对代码进行分支。
在此方案中,可以使用 switch 语句为每种水果类型创建单独的分支。
switch 语句的工作原理是什么?
该 switch 语句从可能的 switch 节列表中选择要执行的代码部分。 选定的 switch 部分是根据语句的匹配表达式的模式匹配来选择的。
请考虑以下代码示例,该示例显示了语句的基本结构 switch :
switch (fruit)
{
case "apple":
Console.WriteLine($"App will display information for apple.");
break;
case "banana":
Console.WriteLine($"App will display information for banana.");
break;
case "cherry":
Console.WriteLine($"App will display information for cherry.");
break;
}
匹配表达式(也称为 switch 表达式)是在 switch 关键字后面的值,在这个例子中为 (fruit)。 每个开关部分都由案例模式定义。 事例模式是使用关键字 case 后跟值构造的。 此示例中的第一种情况模式是: case "apple":。 事例模式是评价为 true 或 false 的布尔表达式。 每个 switch 节包含少量的代码行,如果事例模式与匹配表达式匹配,将执行这些代码行。 在此示例中,如果 fruit 被赋值为“apple”,则第一个情况模式将计算为 true,并执行对应的 switch 语句块。
switch 语句必须至少包含一个 switch 节,但通常包含三个或多个 switch 节。
在以下情况下,使用开关是最合适的:
- 你有一个要与许多可能值匹配的单个值(变量或表达式)。
- 对于任何给定的匹配项,最多需要执行几行代码。
注释
这个switch语句的第一个示例是特意简单的,而你对语法的检查是简短的。 在研究下列部分中的一些更高级场景时,你将会考察switch语句的其他特性。
是时候准备编码环境并开始开发自己的 switch 语句了。
准备编码环境
本模块包括指导你完成生成和运行演示代码的过程的动手活动。 建议使用 Visual Studio Code 作为开发环境来完成这些活动。 使用 Visual Studio Code 来完成这些活动将帮助你在供全球专业人员使用的开发人员环境中更舒适地编写和运行代码。
打开 Visual Studio Code。
可以使用 Windows“开始”菜单(或等效资源 [对于其他 OS])打开 Visual Studio Code。
在 Visual Studio Code 的“文件”菜单上,选择“打开文件夹”。
在“打开文件夹”对话框中,导航到 Windows“桌面”文件夹。
如果使用了其他文件夹位置来保存代码项目,可以改用该文件夹位置。 对于此训练,重要的是要有一个容易找到和记住的位置。
在“打开文件夹”对话框中,选择“选择文件夹”。
如果看到一个询问是否信任作者的安全对话框,请选择“是”。
在 Visual Studio Code 的“终端”菜单上,选择“新终端”。
请注意,“终端”面板中的命令提示符显示当前文件夹的文件夹路径。 例如:
C:\Users\someuser\Desktop>注释
如果你在自己的电脑上工作,而不是在沙盒或托管环境中工作,并且你已经完成此 C# 系列中的其他 Microsoft Learn 模块,那么你可能已经为代码示例创建了一个项目文件夹。 如果是这种情况,可以跳过下一步,该步骤用于在 TestProject 文件夹中创建控制台应用。
在终端命令提示符下,若要在指定文件夹中创建新的控制台应用程序,请输入以下提示:
dotnet new console -o ./CsharpProjects/TestProject此 .NET CLI 命令使用 .NET 程序模板在指定文件夹位置创建新的 C# 控制台应用程序项目。 该命令会自动创建 CsharpProjects 和 TestProject 文件夹,并使用 TestProject 作为
.csproj文件的名称。如果显示一条消息,告知文件已存在,请继续执行后续步骤。 你将重复使用现有的项目文件。
在 EXPLORER 视图中,展开 CsharpProjects 文件夹。
应会看到 TestProject 文件夹和两个文件:一个名为Program.cs的 C# 程序文件和一个名为 TestProject.csproj 的 C# 项目文件。
在 Visual Studio Code 的“文件”菜单上,选择“打开文件夹”。
在 “打开文件夹 ”对话框中,选择 CsharpProjects 文件夹,然后选择“ 选择文件夹”。
在 EXPLORER 视图中,展开 TestProject 文件夹,然后选择 Program.cs。
删除现有代码行。
在本模块中,你将使用此 C# 控制台项目来创建、生成和运行代码示例。
关闭“终端”面板。
创建并测试 switch 语句
确保已打开 Visual Studio Code,并且“编辑器”面板中显示了 Program.cs。
注释
Program.cs 应为空。 如果不是,请选择并删除所有代码行。
在 Visual Studio Code 编辑器中键入以下代码:
int employeeLevel = 200; string employeeName = "John Smith"; string title = ""; switch (employeeLevel) { case 100: title = "Junior Associate"; break; case 200: title = "Senior Associate"; break; case 300: title = "Manager"; break; case 400: title = "Senior Manager"; break; default: title = "Associate"; break; } Console.WriteLine($"{employeeName}, {title}");在 Visual Studio Code 的“文件”菜单上,选择“保存”。
在生成或运行代码之前,必须保存 Program.cs 文件。
在“资源管理器”面板中,若要在 TestProject 文件夹位置打开终端,请右键单击“TestProject”,然后选择“在集成终端中打开”。
终端面板将打开。 终端应包含一个命令提示符,显示终端已打开并指向你的 TestProject 文件夹位置。
在终端命令提示符处,若要运行代码,请键入 dotnet run,然后按 Enter。
注释
如果看到一条指示“找不到要运行的项目”的消息,请确保终端命令提示符显示预期的 TestProject 文件夹位置。 例如:
C:\Users\someuser\Desktop\csharpprojects\TestProject>应会看到以下输出:
John Smith, Senior Associate花一分钟时间查看输入的
switch语句。请注意,该
switch语句定义单个代码块。该
switch语句定义包含 switch 节列表的单个代码块。switch关键字的右侧是一个用括号括起来的 switch 表达式。请注意代码块中的 switch 部分列表。
代码
switch块包含 开关部分的列表,每个部分都包含一个或多个开关标签。 此外,每个 switch 节都包含一个语句列表,如果标签等于 switch 语句顶部定义的 switch 表达式,将执行该列表。switch 表达式会从上到下依次与 case 标签进行比较,直到找到一个等于 switch 表达式的值。 如果标签都不匹配,将执行
defaultcase 的语句列表。 如果未包含默认值,控件将传输到 switch 语句的终结点。 每个标签必须提供与 switch 表达式中指定的类型匹配的值类型。注释
可选
default标签可以出现在 switch 部分列表中的任何位置。 但是,大多数开发人员选择将其放在最后一个位置,因为它更有意义(逻辑上)定位default为最终选项。 无论位置如何,default部分都将最后计算。在我们的示例中:
- switch 表达式为
(employeeLevel) - 每个开关部分都有一个开关标签(
case或default)。 - 匹配的 switch 部分根据
case: 200定义,因为employeeLevel = 200。
- switch 表达式为
请注意,每个 switch 部分都与下一个 switch 部分分隔。
只允许执行一个 switch 部分。 这意味着,执行一个 switch 部分不能“贯穿”执行到下一个 switch 部分。 使用
break关键字是在进入下一部分之前结束 switch 部分的一种方法。 如果未使用break关键字(或return关键字),编译器将生成错误。
更改级别变量的值以查看 switch 语句如何评估它
为了测试默认情况,我们通过修改值分配来变更员工的级别。
若要修改分配给
employeeLevel的值,请按如下所示更新代码:int employeeLevel = 201;保存代码文件,然后使用 Visual Studio Code 运行代码。
在终端命令提示符处输入
dotnet run以运行代码。请注意,输出已更改。
现在,当您运行代码时,应该会看到使用更通用的标题。
John Smith, Associate由于该
employeeLevel标签与任何标签不匹配,因此default将匹配该标签。
修改开关部分以包含多个标签
假设我们公司决定向所有级别 100 名员工授予“高级助理”称号,这与 200 级员工相同。 作为开发人员,你决定通过删除属于标签 case 100:的第一个 switch 节来实现此方案,而是允许 case 100: 和 case 200: 标签执行相同的切换节。
若要修改分配给
employeeLevel的值,请按如下所示更新代码:int employeeLevel = 100;若要将多个标签分配给第一个 switch 节,请按如下所示更新代码:
case 100: case 200: title = "Senior Associate"; break;完成更改后,修改应与以下代码匹配:
int employeeLevel = 100; string employeeName = "John Smith"; string title = ""; switch (employeeLevel) { case 100: case 200: title = "Senior Associate"; break; case 300: title = "Manager"; break; case 400: title = "Senior Manager"; break; default: title = "Associate"; break; } Console.WriteLine($"{employeeName}, {title}");保存代码文件,然后使用 Visual Studio Code 运行代码。
在终端命令提示符处输入
dotnet run以运行代码。应会看到以下输出:
John Smith, Senior Associate两个 case 标签
100和200现在已与 switch 部分配对,该部分用于将头衔设置为字符串值Senior Associate。
回顾
以下是关于 switch 语句的主要要点:
switch如果有一个值具有多个可能的匹配项,则使用该语句,每个匹配项都需要代码逻辑中的分支。- 可以使用通过
case关键字定义的一个或多个标签来匹配单个包含代码逻辑的开关部分。 - 使用可选的
default关键字创建一个标签和一个 switch 语句,当没有其他 case 标签匹配时,此语句将被使用。