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 语句作了介绍。