iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C#8.0中的模式匹配
  • 104
分享到

C#8.0中的模式匹配

2024-04-02 19:04:59 104人浏览 薄情痞子
摘要

C# 8.0中的模式匹配相对C# 7.0来说有了进一步的增强,对于如下类: class Point { public int X { get; } public in

C# 8.0中的模式匹配相对C# 7.0来说有了进一步的增强,对于如下类:

class Point
{
    public int X { get; }
    public int Y { get; }
    public Point(int                x, int     y) => (X, Y) = (x, y);
    public void Deconstruct(out int x, out int y) => (x, y) = (X, Y);
}

首先来看C# 7.0中一个经典的模式匹配示例:

static string Display(object o)
{
    switch (o)
    {
        case Point p when p.X == 0 && p.Y == 0:
            return "origin";
        case Point p:
            return $"({p.X}, {p.Y})";
        default:
            return "unknown";
    }
}

在C# 8.0中,它有更加精简的写法。

Switch表达式

在C# 8.0中,可以利用新的switch方式成模式匹配:

static string Display(object o) => o switch
{
    Point p when p.X == 0 && p.Y == 0 => "origin",
    Point p                           => $"({p.X}, {p.Y})",
    _                                 => "unknown"
};

它利用一条switch语句完成了模式匹配,第一样看上去要简洁一些。不过,它还有更多更简单的写法。

Property patterns

可以直接通过在属性上指定值作为判定条件,

static string Display(object o) => o switch
{
    Point { X: 0, Y: 0 } => "origin",
    Point p              => $"({p.X}, {p.Y})",
    _                    => "unknown"
};

也可以将属性值传递出来。

static string Display(object o) => o switch
{
    Point { X: 0, Y: 0 }         => "origin",
    Point { X: var x, Y: var y } => $"({x}, {y})",
    _                            => "unknown"
};

Positional patterns

利用解构函数,可以写出更加精简的表达式。

static string Display(object o) => o switch
{
    Point(0, 0)         => "origin",
    Point(var x, var y) => $"({x}, {y})",
    _                   => "unknown"
};

如果没有类型转换,则可以写得更加简单了:

static string Display(Point o) => o switch
{
    (0, 0)         => "origin",
    (var x, var y) => $"({x}, {y})"
};

非空判断

如果只是判断空和非空,则有最简单的模式:

{ }  => o.ToString(),
null => "null"	

Tuple patterns

也支持直接对ValueTuple进行模式匹配,用起来非常灵活。

static State ChangeState(State current, Transition transition, bool hasKey) =>
    (current, transition, hasKey) switch
{
    (Opened, Close, _)     => Closed,
    (Closed, Open,  _)     => Opened,
    (Closed, Lock, true)   => Locked,
    (Locked, Unlock, true) => Closed,
    _ => throw new InvalidOperationException($"Invalid transition")
};

小结

C# 8.0的模式匹配有了进一步的增强,虽然可以又有人要说是语法糖了,但用得好的话可以让你的代码逻辑简化不少,更加容易理解。

参考文章

Do more with patterns in C# 8.0

到此这篇关于C#模式匹配的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C#8.0中的模式匹配

本文链接: https://www.lsjlt.com/news/153459.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#8.0中的模式匹配
    C# 8.0中的模式匹配相对C# 7.0来说有了进一步的增强,对于如下类: class Point { public int X { get; } public in...
    99+
    2024-04-02
  • C# 模式匹配完全指南
    目录前言模式匹配实例:表达式计算器常数表达式参数表达式一元表达式二元表达式三元表达式表达式判等常数表达式参数表达式一元表达式二元表达式三元表达式一些工具方法测试活动模式后记前言 自从...
    99+
    2024-04-02
  • C语言中如何实现模式匹配
    这篇文章主要介绍了C语言中如何实现模式匹配的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言中如何实现模式匹配文章都会有所收获,下面我们一起来看看吧。C语言数据结构中串的模式匹配串的模式匹配问题:朴素算法与K...
    99+
    2023-06-16
  • Scala中的模式匹配是什么
    这篇文章主要介绍Scala中的模式匹配是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性,Sca...
    99+
    2023-06-27
  • Scala模式匹配的方法
    这篇文章主要介绍“Scala模式匹配的方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Scala模式匹配的方法”文章能帮助大家解决问题。简单匹配Scala的模式匹配最常用于match语句中。下面是...
    99+
    2023-06-27
  • Beam中的模式匹配怎么实现
    在Beam中,模式匹配可以通过使用Match和Case来实现。Match用于指定要匹配的值,Case用于定义匹配的模式和对应的处理逻...
    99+
    2024-04-02
  • C#模式匹配有哪些及怎么实现
    这篇文章主要介绍“C#模式匹配有哪些及怎么实现”,在日常操作中,相信很多人在C#模式匹配有哪些及怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#模式匹配有哪些及怎么实现”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-29
  • C语言中怎么实现朴素模式匹配算法
    这篇文章主要介绍“C语言中怎么实现朴素模式匹配算法”,在日常操作中,相信很多人在C语言中怎么实现朴素模式匹配算法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言中怎么实现朴素模式匹配算法”的疑惑有所帮助!...
    99+
    2023-06-08
  • C语言字符串的模式匹配之BF与KMP
    目录BF算法(Brute-Force算法)KMP算法(快速的)KMP—yxc模板总结确定一个子串(模式串)在主串中第一次出现的位置。 BF算法(Brute-Force算法) BF算法...
    99+
    2024-04-02
  • PHP中使用Redis实现模式匹配
    在 web 开发中,Redis 已经成为了非常流行的缓存和数据库,而 PHP 也是广泛使用的 web 开发语言。结合这两者,我们可以在 PHP 中使用 Redis 来实现模式匹配的功能,极大地提高了网站的性能和用户体验。Redis 是一款基...
    99+
    2023-05-15
    PHP redis 模式匹配
  • 匹配重复模式的正则表达式
    小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《匹配重复模式的正则表达式》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!问题内容我有以...
    99+
    2024-04-04
  • 从 Go 中的字符串中提取匹配模式
    编程网今天将给大家带来《从 Go 中的字符串中提取匹配模式》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我...
    99+
    2024-04-04
  • Javascala模式匹配机制详解
    目录模式匹配使用类型匹配进行异常处理使用样例进行模式匹配模式匹配 Scala有一个十分强大的模式匹配机制,可以应用在很多场合:switch语句、类型查询,以及“析构&rd...
    99+
    2023-02-01
    Java scala模式匹配 Java scala模式匹配机制 Java scala
  • C语言中实现朴素模式匹配算法的示例分析
    这篇文章给大家分享的是有关C语言中实现朴素模式匹配算法的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、什么是字符串的模式匹配?字符串模式匹配:在主串中找到与模式串相同的子串,并返回其所在位置。注意:①...
    99+
    2023-06-15
  • PHP用模式匹配文件名
    ...
    99+
    2024-04-02
  • Rust模式匹配示例详解
    目录函数斐波那契数列函数小结函数 今天学习的内容是 Rust 中的函数。 函数,和 if 条件控制,while、loop、for 循环控制,在底层都是使用跳转实现的,所以函数也属于流...
    99+
    2022-11-13
    Rust 模式匹配 Rust 模式
  • opencv C++模板匹配的简单实现
    目录一简单实现二函数及原理讲解1matchTemplate()参数详解2minMaxLoc()函数一 简单实现 #include <opencv2/opencv.hpp>...
    99+
    2024-04-02
  • MySQL中有哪些字符串匹配模式
    这期内容当中小编将会给大家带来有关MySQL中有哪些字符串匹配模式,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。  MySQL字符串匹配模式有哪些  SQL的模式匹配允许...
    99+
    2024-04-02
  • opencv C++模板匹配的实现方法
    这篇文章主要介绍“opencv C++模板匹配的实现方法”,在日常操作中,相信很多人在opencv C++模板匹配的实现方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”opencv&nb...
    99+
    2023-06-29
  • JavaScala之模式匹配与隐式转换
    目录模式匹配:基础语法如下:模式守卫:类型匹配:对象匹配样例类:偏函数:偏函数的化简写法:偏函数的使用:隐式转换:官方定义:个人理解:隐式函数:隐式转换的步骤:隐式参数:参数对比样例...
    99+
    2023-05-18
    Java Scala模式匹配 Scala隐式转换
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作