学习路径
/
C#
C#
/
教学大纲
/
`switch` 语句
`s

`switch` 语句 属于 C#

2 个练习

关于 `switch` 语句

switch 语句在编程语言中有着悠久的历史。它最早出现在 C 中,并因速度而备受青睐。但这份速度的代价,是功能受到了极大的限制。在 C# 中,switch 语句的作用已经扩展到了整数之外。switch 语句可以涵盖任意类型、任意值或引用。

如果你来自函数式语言,那么在 C# 中使用switch语句(以及别处讨论的 switch 表达式)就是最接近可辨识联合和模式匹配的做法。不过,它们在强制类型安全方面的能力远不及可辨识联合。

简单的 switch 语句与其 C 语言的前身类似,由 switch、case、break 和 default 组合而成。

int direction = GetDirection();
switch (direction)
{
    case 1:
        GoLeft();
        break;
    case 2:
        GoRight();
        break;
    default:
        MarkTime();
        break;
}

上面的模式可以用于任何简单类型(基元类型加字符串)。

如果再加上引用类型,就需要用到额外的语法:先把类型向下转换,然后添加守卫(when),不过守卫也可以和简单的值 case 一起使用。下面举例说明:

Animal animal = GetAnimal();

switch(animal)
{
    case Dog canine:
    case Coyote canine:
        canine.Bark();
        break;
    case Cat cat when cat.HasOnly8Lives():
        cat.IsCareful();
        cat.Meow();
        break;
    case Cat cat:
        cat.Meow();
        break;
}
  • default 子句是可选的,但通常还是写上为好。
  • 对于任何非空的 case 子句,break 语句都是必需的。
  • 显然,所有 case 标签的参数类型都必须派生自 switch 参数的类型。类型为 Object 的 switch 参数显然允许的范围最广。
  • 守卫表达式可以包含作用域内的任何内容,而不只是 case 参数的成员。
  • 多个带有不同 case 参数的 case 可以引用同一个代码块。

switch 语句文档对 switch 语句作了介绍。

通过 GitHub 编辑 该链接会在新窗口或标签页中打开

学习 `switch` 语句

练习已锁定

再解锁 6 个练习即可练习 `switch` 语句