switch语句

1835 更新于: 2021-07-20 读完约需 11 分钟

switch语句概述

switch语句有点类似if...else if系列语句,switchif语句中相当于ifcase类似于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语句互换?

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

本文永久链接码友网 » C#程序设计基础(入门篇) » switch语句 分享:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册