• c#中switch常用模式


    声明模式

    首先检查value的类型,然后根据类型输出相应的消息

    public void ShowMessage(object value)
    {
        switch (value)
        {
            case int i: Console.WriteLine($"value is int:{i}"); break;
            case long l: Console.WriteLine($"value is long:{l}"); break;
            case bool b: Console.WriteLine($"value is bool:{b}"); break;
            case string s: Console.WriteLine($"value is string:{s}"); break;
            default: Console.WriteLine($"value is object"); break;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    类型模式

    类型模式可以理解为在声明模式中使用了弃元:

    public void ShowMessage(object value)
    {
        switch (value)
        {
            case int: Console.WriteLine($"value is int"); break;
            case long: Console.WriteLine($"value is long"); break;
            case bool: Console.WriteLine($"value is bool"); break;
            case string: Console.WriteLine($"value is string"); break;
            default: Console.WriteLine($"value is object"); break;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    常量模式

    常量模式可以理解为原来C#6.0及之前的用法:

    switch (score)
    {
        case 10:
        case 9:
            Console.WriteLine("优秀");
            break;
        case 8:
            Console.WriteLine("良好");
            break;
        case 7:
        case 6:
            Console.WriteLine("及格");
            break;
        default:
            Console.WriteLine("不及格");
            break;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    关系模式
    switch(score)
    {
        case >=80:
            Console.WriteLine("excellent");
            break;
        case >=60:
            Console.WriteLine("good");
            break;
        default:
            Console.WriteLine("poor");
            break;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    逻辑模式
    switch(value)
    {
        case 0:
            Console.WriteLine("value is 0");
            break;
        case not 0 and(100 or - 100):
            Console.WriteLine("abs(value)==100");
            break;
        case not 0 and( > 0 and < 100):
            Console.WriteLine("value is positive and less than 100");
            break;
        case not 0 and > 0:
            Console.WriteLine("value is positive and greater than 100");
            break;
        case <-100 or( < 0 and > -100):
            Console.WriteLine("value is negative and not equals -100");
            break;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    属性模式
    switch(time)
    {
        case {
            Year: 2020 or 2021,
            Month: <= 6,
            Day: 1
        }
        t:
            Console.WriteLine($ "the first day of every month in the first half of 2020 and 2021");
            break;
        case {
            Year: not 2022
        }:
            Console.WriteLine($ "not 2022");
            break;
        case {
            DayOfWeek: not DayOfWeek.Sunday and not DayOfWeek.Saturday
        }:
            Console.WriteLine($ "recursion");
            break;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    位置模式

    位置模式采用解构的特性来说明指定的模式是否匹配:

    public record Point2D(int X, int Y); //记录可以解构
    static void Print(Point2D point)
    {
        switch(point)
        {
            case( > 0, > 0):
                Console.WriteLine("first quadrant");
                break;
            case( < 0, > 0):
                Console.WriteLine("second quadrant");
                break;
            case( < 0, < 0):
                Console.WriteLine("third quadrant");
                break;
            case( > 0, < 0):
                Console.WriteLine("fourth quadrant");
                break;
            default:
                Console.WriteLine("coordinate axis");
                break;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    Var模式

    Var模式往往和属性模式和位置模式结合,用于提取属性变量值:

    switch(point)
    {
        case(var x,
            var y,
                var z):
            Console.WriteLine($ "3D point:({x},{y},{z})");
            break; //在位置模式中使用
        case Point2D
        {
            X: var x, Y: var y
        }:
            Console.WriteLine($ "2D point:({x},{y})");
            break; //在属性模式中使用
        default:
            Console.WriteLine("others");
            break;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    弃元模式

    弃元模式在switch语句中用的不多,但是在switch表达式中使用的多:

    var result = score
    switch
    { >= 80 => "excellent", >= 60 => "good",
            _ => "poor" //弃元在switch表达式中就相当于default
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    在本地与服务器之间拷贝数据
    Redis 键(key)
    【CSP试题回顾】201512-1-数位之和
    map的一道题目<单词识别>
    运算放大器典型应用(三)
    奇舞周刊第 470 期:(10 月最新) 前端图形学实战:从零开发几何画板 (vue3 + vite 版)...
    基于卷积神经网络与双向长短时融合的锂离子电池剩余使用寿命预测
    数据结构中,索引存储和散列存储区别较为详细的介绍
    C语言 ——宽字符
    美国访问学者签证有哪些要求?
  • 原文地址:https://blog.csdn.net/qq_35624605/article/details/134241066