当前位置: 首页 > news >正文

C# 中使用模式匹配 备忘

模式匹配#
要使用模式匹配,首先要了解什么是模式。在使用正则表达式匹配字符串时,正则表达式自己就是一个模式,而对字符串使用这段正则表达式进行匹配的过程就是模式匹配。而在代码中也是同样的,我们对对象采用某种模式进行匹配的过程就是模式匹配。

某些类型包含 Deconstruct 方法,该方法将其属性解构为离散变量。 如果可以访问 Deconstruct 方法,就可以使
用位置模式检查对象的属性并将这些属性用于模式。 考虑以下 Point 类,其中包含用于为 X 和 Y 创建离散变
量的 Deconstruct 方法:

public 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);
}

此外,请考虑以下表示象限的各种位置的枚举

public enum Quadrant
{
Unknown,
Origin,
One,
Two,
Three,
Four,
OnBorder
}

下面的方法使用位置模式来提取 x 和 y 的值。 然后,它使用 when 子句来确定该点的 Quadrant :

static Quadrant GetQuadrant(Point point) => point switch
{
(0, 0) => Quadrant.Origin,
var (x, y) when x > 0 && y > 0 => Quadrant.One,
var (x, y) when x < 0 && y > 0 => Quadrant.Two,
var (x, y) when x < 0 && y < 0 => Quadrant.Three,
var (x, y) when x > 0 && y < 0 => Quadrant.Four,
var (_, _) => Quadrant.OnBorder,
_ => Quadrant.Unknown
};

当 x 或 y 为 0(但不是两者同时为 0)时,前一个开关中的弃元模式匹配。 Switch 表达式必须要么生成值,要么
引发异常。 如果这些情况都不匹配,则 switch 表达式将引发异常。 如果没有在 switch 表达式中涵盖所有可能的
情况,编译器将生成一个警告。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • RT2-使用NLP的方式去训练机器人控制器
  • 半监督方案跟域自适应方案哪个更能提升目标检测泛化效果?
  • [高频 SQL 50 题(基础版)]第一千七百五十七题,可回收且低脂产品
  • Perl 语言入门学习及实践
  • 运维系列.Nginx:自定义错误页面
  • AI提示词:打造爆款标题生成器
  • 数字信号处理教程(3)——z变换
  • 音频demo:使用开源项目lame来将MP3数据解码出PCM数据
  • JS之防抖和节流
  • SQL FOREIGN KEY
  • 全网最适合入门的面向对象编程教程:12 类和对象的 Python 实现-Python 使用 logging 模块输出程序运行日志
  • [激光原理与应用-102]:南京科耐激光-激光焊接-焊中检测-智能制程监测系统IPM介绍 - 6 - 激光焊接系统的组成
  • 【密码学】分组密码概述
  • Rockchip RK3588 - Rockchip Linux SDK脚本分析
  • 探索C嘎嘎的奇妙世界:第十九关---STL(list的模拟实现)
  • 77. Combinations
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • ECMAScript入门(七)--Module语法
  • JavaScript实现分页效果
  • Spring-boot 启动时碰到的错误
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 目录与文件属性:编写ls
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 学习笔记:对象,原型和继承(1)
  • 在Unity中实现一个简单的消息管理器
  • - 转 Ext2.0 form使用实例
  • 扩展资源服务器解决oauth2 性能瓶颈
  • 通过调用文摘列表API获取文摘
  • #Linux(帮助手册)
  • $.ajax中的eval及dataType
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (亲测有效)推荐2024最新的免费漫画软件app,无广告,聚合全网资源!
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .gitignore
  • .htaccess配置重写url引擎
  • .net 按比例显示图片的缩略图
  • .NET 反射 Reflect
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .net程序集学习心得
  • .NET处理HTTP请求
  • .NET基础篇——反射的奥妙
  • .NET开发者必备的11款免费工具
  • @private @protected @public
  • @requestBody写与不写的情况
  • [100天算法】-x 的平方根(day 61)
  • [Algorithm][动态规划][两个数组的DP][正则表达式匹配][交错字符串][两个字符串的最小ASCII删除和][最长重复子数组]详细讲解
  • [AS3]URLLoader+URLRequest+JPGEncoder实现BitmapData图片数据保存
  • [AWS]CodeCommit的创建与使用
  • [BT]BUUCTF刷题第9天(3.27)