switch语句概述
switch语句有点类似if...else if
系列语句,switch
在if
语句中相当于if
,case
类似于else if
。但是switch语句也有自己的语法和特点,语法格式如下:
switch(testVar)
{
case value_1:
[statement(s);]
break;
case value_2:
[statement(s);]
break;
.
.
.
case value_n:
[statement(s);]
break;
default:
[statement(s);]
break;
}
当执行switch语句时,程序将使用testVar
的值依次和语句块中的每一个case
值进行比较,如果相等,则执行这个case
语句块中的代码,然后结束此switch语句。否则比较下一个case
的值。
如果所有case
的值都没有和testVar
相等的,那么如果存在default
语句,则执行default
块中的代码,如果没有default
语句,则结束整个switch
语句。
示例
int score = 60;
switch(score){
case 60:
Console.WriteLine("及格");
break;
case 80:
Console.WriteLine("良好");
break;
default:
Console.WriteLine("未知");
break;
}
Console.ReadLine();
以上可以使用if…else…语句来改写,如下:
int score = 60;
if (score == 60)
Console.WriteLine("及格");
else if (score == 80)
Console.WriteLine("良好");
else
Console.WriteLine("未知");
知识点强化
case
的值必须是一个常量,不能是表达式case
的值不能相同default
语句可以没有
多个case
可以写在一起,如:case 60: case 70: statement(s); break;
,这时相当于if(score==60||score==70)
testVar
的值可以是数字,字符,字符串,枚举,布尔值等
case分支中如果没有break
,return
或者goto
等关键字,编译器会报错
switch块中可以没有任何代码,编译器不会报错,但不推荐这样做(没任何代码,写个switch在这里有什么意思呢?)
switch表达式(C# 8.0)
微软在C# 8.0及以上版本中引入了switch的新特性—switch表达式,它根据与输入表达式匹配的模式,对候选表达式列表中的单个表达式进行求值。使用switch表达式可以让编码更简洁。
下面的示例演示了一个 switch 表达式,该表达式将在线地图中表示视觉方向的 enum 中的值转换为相应的基本方位:
public static class SwitchExample
{
public enum Direction
{
Up,
Down,
Right,
Left
}
public enum Orientation
{
North,
South,
East,
West
}
public static Orientation ToOrientation(Direction direction) => direction switch
{
Direction.Up => Orientation.North,
Direction.Right => Orientation.East,
Direction.Down => Orientation.South,
Direction.Left => Orientation.West,
_ => throw new ArgumentOutOfRangeException(nameof(direction), $"Not expected direction value: {direction}"),
};
public static void Main()
{
var direction = Direction.Right;
Console.WriteLine($"地图视觉方向是:{direction}");
Console.WriteLine($"对应的基本方位是:{ToOrientation(direction)}");
// 输出结果:
// 地图视觉方向是:Right
// 对应的基本方位是:East
}
}
对比原始的switch语句实现代码:
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var direction = Direction.Right;
Console.WriteLine($"地图视觉方向是:{direction}");
Console.WriteLine($"对应的基本方位是:{ToOrientation(direction)}");
}
public enum Direction
{
Up,
Down,
Right,
Left
}
public enum Orientation
{
North,
South,
East,
West
}
public static Orientation ToOrientation(Direction direction)
{
switch (direction)
{
case Direction.Up:
return Orientation.North;
case Direction.Right:
return Orientation.East;
case Direction.Down:
return Orientation.South;
case Direction.Left:
return Orientation.West;
default:
throw new ArgumentOutOfRangeException(nameof(direction),
$"Not expected direction value: {direction}");
}
}
}
}
思考
if...else if...
与 switch
语句分别适用的场合有哪些,在哪些情况下if...else if...
可以与switch
语句互换?
发表评论
登录用户才能发表评论, 请 登 录 或者 注册