模式匹配”是一种测试表达式是否具有特定特征的方法。
C# 模式匹配提供更简洁的语法,用于测试表达式并在表达式匹配时采取措施。
- 模式匹配需要使用 is 关键字来启用。
- 模式匹配仅接收常量输入。
- 模式匹配使用专用的语法规则。
这种做法的意义在于,不接收用户自定义的运算符或自定义类型转换规则。
但是几种基础的数字类型除外。 - 模式匹配大多数都会得到一个bool值,来指示是否匹配成功。
与运算符相似的模式
常量
在与常量比较时不需要使用等于号。
如果一个类型可能可以是目标类型,那么可以直接对其使用目标类型来判断。
不需要先经过类型转换。
关系
如果被判断的值可能是数字类型,可以使用关系运算符(等于和不等于除外)进行关系判断。
逻辑
模式匹配使用三个关键字:and,or,not来代替 与或非 运算符
模式匹配只会执行一次取值,所以如果逻辑条件可以覆盖所有情况,会得出常量。
括号
使用逻辑模式时,也可以使用括号改变优先级顺序。
默认情况下模式匹配会先判断与,再判断或
类型
模式匹配可以判断是否为某一种类型。
在之后的与关系模式中,可以假设判断假设是这种类型的情况。
类型模式判断的是值的实际类型。null检测不出任何类型。
如果以可空值类型为条件进行判断,则不能附加其他任何条件。
检测内容的模式
属性
属性模式可以对值的属性进行模式匹配。
使用一对大括号展开属性,然后用属性名+冒号+模式来判断。
多个属性使用逗号隔开。
任何检测内容的模式,都会预检测被判断的值不为null。
一个不检测任何属性的属性模式,效果相当于一个非空判断。
属性模式内的模式是独立的模式,也就是说可以继续对他们使用属性模式。
位置
位置模式是针对元组的模式,每个元素使用逗号隔开。
可以在模式匹配的同时对其进行析构。并对每一个元素进行模式匹配。
列表
列表模式是针对数组或类似的类型生效的。
可以展开内部的元素,并逐个进行模式匹配。
列表模式使用中括号展开,使用逗号分隔。
列表模式也会同时校验元素的数量。
只有数量也匹配时才会匹配。
范围
使用列表模式时,可以使用范围模式。
范围模式可以代表不限数量(可以是0个)的中间的元素。
范围模式在同一个列表模式中,只能最多存在一个。
范围模式使用两个点,表示中间省略的元素。
弃元
对于位置模式,和列表模式等有先后顺序的元素,可以使用弃元不对其进行模式匹配。
声明模式
类型
在使用类型模式时,可以声明一个该类型的变量。
但是如果没有流程控制语句为其保证,其他地方会认为这是一个没有赋值的变量。
类型模式可以使用and连接其他条件,但不能接or。
如果要使用not,只能用在开头。并且此时会变成,如果匹配则没有赋值局部变量。
var
var可以匹配任何元素,是声明模式下对弃元模式的替代。
在模式匹配的同时进行对匹配到的元素进行声明变量,
可以弥补模式匹配不能接收变量的缺点。
范围
在使用范围模式时,也可以结合var模式声明一个变量。
取出来的类型,和直接使用索引+范围一样。