欢迎光临散文网 会员登陆 & 注册

C# 对位模式

2023-01-14 22:22 作者:SunnieShine  | 我要投稿

1、语法

对位模式是将一个数据成员通过解构方法来产生解构,来判断属性数据的过程。假设我们拥有这样一个数据类型:

显然这里的 XYPoint 里仅存的两个数据成员。如果我们在某个时刻判断数据信息的具体数值的时候,我们可能会使用如下的写法:

在 C# 里,我们只要写上一个自定义的解构函数,就可以对对象进行解构操作。我们写一个 Deconstruct 方法,然后带有两个参数:xy,它们都是 out int 类型的。

通过这样的赋值后,我们就可以通过这个解构来完成数据的解构了:

当然,在模式匹配的时候,我们可以使用这样的代码对上面的写法进行简化:

不过,这样还不是很好看。因此 C# 还有这样的对位模式匹配:

通过一对小括号,我们可以实现对这个数据成员具体数值的检测。至于这里为什么是小写字母 xy,是因为解构函数的参数分别是 xy,这是一一对应的。正是因为如此,这个模式才叫做对位模式。其中,因为它借助了解构函数,而解构后的对象分配使用的是一对小括号(var (x, y) = point; 这个语句),因此为了配合这个写法,也用的是小括号。只是这里需要写出解构参数的名字。

稍微注意一点的是,C# 允许在同一个数据类型下定义多个解构函数,所以这正是为什么必须给出解构参数名称的原因。除非这个类型就这一个解构函数,那么我们都必须写出解构参数名。

2、主构造器的对位模式

C# 9 和 C# 10 分别诞生了记录类型和记录结构类型,它们必须绑定一个主构造器位于声明的头部:

在使用模式匹配的时候,由于编译器会自动生成对应的解构函数,因此我们可以直接对主构造器使用对位模式匹配。

其中,小括号 (Name: "Sunnie", Age: 25, _) 左侧的数据类型类似于 obj is T tT,而小括号书写出来的对位模式,则是 C# 允许的语法。它们甚至可以写在一起。当然,如果类型一样就不必判断类型了。

3、调用扩展方法的对位模式

同时,编译器也能够嗅探扩展方法。换句话说,对位模式也允许扩展方法的解构函数。因此,C# 也允许调用扩展方法的解构函数来对位判断元素信息。

于是我们可以使用这个方法对一个 T[] 进行解构:


C# 对位模式的评论 (共 条)

分享到微博请遵守国家法律