正在加载...

switch

int choice = 2; 保存整数 2。接着 switch (choice) 把该数与固定标签比较。当 choice 为 2 时,case 2 运行,Console.WriteLine("mid") 写出 mid。屏幕只有一行。请保留公共类名 Pine。

一个值,若干固定标签

打开 Pine 文件。类名保持 Pine。本页不重命名类型。若仍有 bool ready 行,请删掉,包括 if (ready)、pass、wait,以及上一页的每个 else 块。若仍有 bool both 请删。删掉任何 ReadLine 行。你保留的文件不等待输入,没有 ready,也没有 if / else 分叉。屏幕只由匹配 case 下或 default 下的写出语句写出。

在 Main 里,先在 switch 之前保存一个整数:int choice = 2;。int 是类型词。choice 是名称,以小写 c 开头。2 两侧没有引号。分号结束保存行。该行不写屏幕。接着才是 switch 本身:
switch (choice) {
case 1:
Console.WriteLine("low");
break;
case 2:
Console.WriteLine("mid");
break;
case 3:
Console.WriteLine("high");
break;
default:
Console.WriteLine("none");
break;
}
单词 switch 全小写。括号里是名称 choice——C# 将与每个 case 标签比较的值。每条 case 行以冒号结束,不是分号。在 case 2 下是 Console.WriteLine("mid");,然后是单词 break 和分号。当 choice 保存 2 时,C# 进入 case 2,写出 mid,遇到 break,离开整个 switch。这次运行不执行 case 3 和 default。请保存文件。

你保留的文件

保持这种教学形状。一个类型词 int。一个名称 choice,保存为 2。一个 switch,括号里是 choice。case 为 1、2、3,各有一条写出语句和一个 break。一个 default,写出 none。没有 ready 行,没有 if,也不在 case 外单独写出裸数字 2。

choice is 2

csharp
using System;

public class Pine
{
    public static void Main()
    {
        int choice = 2;
        switch (choice)
        {
            case 1:
                Console.WriteLine("low");
                break;
            case 2:
                Console.WriteLine("mid");
                break;
            case 3:
                Console.WriteLine("high");
                break;
            default:
                Console.WriteLine("none");
                break;
        }
    }
}

从上往下读。using System; 准备短名。public class Pine 命名类型。public static void Main() 是运行时入口。int choice = 2; 保存 2,不写屏幕。switch (choice) 开始比较。case 2 匹配,于是运行 Console.WriteLine("mid");,然后 break; 离开 switch。屏幕一行:mid。无引号,无第二行。你保留的文件里没有 bool ready 行。

用 dotnet run 运行。程序写出 mid。它不等你输入。保存的数和 switch 已经写在文件里。若 dotnet run 卡住,说明还有 ReadLine,删掉它,保留 int choice = 2; 以及上面的 switch。程序在所选写出语句之后结束。屏幕显示 mid,一行。若屏幕是 2,说明你仍在写出数字本身。若屏幕是 pass 或 wait,说明 if / else 文件还在。删掉 ready 分叉。若屏幕是 none,说明 choice 是一个不匹配任何 case 的值——那是本页第二个文件,不是你保留的文件。若屏幕是字母 switch (choice),说明写出语句给这些字符加了引号。不要因为屏幕行不对就重装 .NET SDK。

为什么是 mid 而不是 low 或 high?因为括号里的值是 2,而 case 2 是匹配的标签。这次运行 C# 不会写出数字 2,除非你专门为该数字写一条写出语句。它写出匹配 case 下实际运行的那条写出语句。括号保留被比较的值。本页每个 case 标签都是固定整数。break 结束 switch,让后续 case 保持安静。default 等待不匹配任何 case 的值——当 choice 为 2 时它闲置不用。

当没有任何 case 匹配时

只改保存的值:int choice = 9;。switch 结构保持不变。现在 case 1、case 2、case 3 都不匹配。C# 转到 default 并运行 Console.WriteLine("none");。屏幕应显示 none,一行。

choice is 9

csharp
using System;

public class Pine
{
    public static void Main()
    {
        int choice = 9;
        switch (choice)
        {
            case 1:
                Console.WriteLine("low");
                break;
            case 2:
                Console.WriteLine("mid");
                break;
            case 3:
                Console.WriteLine("high");
                break;
            default:
                Console.WriteLine("none");
                break;
        }
    }
}

这是第二个文件,不是你保留的文件。运行 dotnet run。屏幕显示 none,一行。不显示 mid。除非你故意写出,否则也不会显示 9。若屏幕是 mid,说明你仍在保留文件上,那里 choice 为 2。看过 none 之后,改回保留文件:int choice = 2;,以及在 case 2 写出 mid 的同一套 switch。两个版本都是合法 C#。它们用匹配的 case 和 default 教同一套 switch 形状。

再按顺序读一遍 default 这次运行。choice 保存 9。switch (choice) 开始。case 1 不匹配。case 2 不匹配。case 3 不匹配。控制继续到 default。执行 Console.WriteLine("none");。屏幕一行。数字 9 本身不会出现,除非你故意写出它。

break 拦住后续 case

break 不是装饰。没有它,C# 在匹配之后可以继续运行下一个 case 的语句。那种 fall-through 会让初学者吃惊。这里有一段故意在 case 2 后忘记 break 的短演示——不是你保留的文件:

missing break after case 2

csharp
using System;

public class Pine
{
    public static void Main()
    {
        int choice = 2;
        switch (choice)
        {
            case 1:
                Console.WriteLine("low");
                break;
            case 2:
                Console.WriteLine("mid");
            case 3:
                Console.WriteLine("high");
                break;
            default:
                Console.WriteLine("none");
                break;
        }
    }
}

当 choice 等于 2 且 case 2 下没有 break 时,屏幕可以一行显示 mid、下一行显示 high。case 2 匹配了,写出 mid,然后落入 case 3 并写出 high。你保留的文件在每个 case 下都放 break,让每条路径恰好写出一行。在再次把 Pine 文件当作保留课文件之前,请把 break 加回去。

让标签保持清楚的规则

被 switch 的值两侧的括号是必需的。写成 switch choice { … } 没有括号时,build 会报错。本页每个 case 标签都是整数常量:case 1:、case 2:、case 3:。标签后跟冒号。写成 case 2; 用分号代替冒号,不是本课要 build 的形状。default 后面没有值——只有 default:,然后是「没有任何匹配」时的语句。

switch 与 if 不是同一工具。if (ready) 问一个 true 或 false 问题。switch (choice) 把一个值与一组固定标签匹配。不要写成 switch (ready) 配一个 bool,却期望与上一页相同的课形。请把本页演示留在名为 choice 的 int 和整数 case 标签上。像 if (score > 10) 这样的比较,在需要范围时仍属于 if;当值离散且事先已知时,switch 更合适。

常见混淆是写出语法本身:Console.WriteLine("switch (choice)");。那会写出字符 switch (choice),并不会选出 case。另一种混淆是把 if / else 演示留在同一个 Main 里,却奇怪为什么屏幕是 pass 而不是 mid。本课的 Main 应只保留那个 int 以及那个 switch。

📊 choice and the screen

choice Screen
1 low
2 mid
3 high
9 none

把表格当作运行后的核对,而不是代替运行。choice 为 2 配你保留的文件写出 mid。choice 为 9 配第二个文件写出 none。choice 为 1 写出 low。choice 为 3 写出 high。若 choice 为 2 时 mid 和 high 都出现,说明 case 2 下缺少 break——先改 break,不要重装 .NET SDK。

现在你可以保存一个整数,把它放进 switch (…),并给每个固定值各自一个带写出语句和 break 的 case。case 匹配时运行那条语句;没有任何匹配时运行 default。下一页是 for,同一块语句可以在计数器变化时一遍又一遍地运行。

屏幕就是匹配的那个 case

你保留的文件写出 mid。名称 choice 在括号里,choice 不上屏。数字 2 在保存行里,2 不上屏。其他 case 在文件里,但在保留那次运行中不会执行。给 switch (choice) 加引号只会写出字母,不会选出匹配的 case。

🧠 测试您的知识

准备开始

测试您的知识

通过这个互动测验挑战自己,看看你对这个主题的理解程度如何

❓
6
问题
🎯
70%
及格要求
♾️
∞
时间
🔄
∞
尝试次数

📝 说明

  • 仔细阅读每个问题
  • 为每个问题选择最佳答案
  • 您可以随时重新参加测验
  • 您的进度将显示在顶部