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

C# ReadOnlySpan 模式

2023-01-17 10:52 作者:SunnieShine  | 我要投稿

从 C# 11 开始,ReadOnlySpan<char> 类型的实例将可以使用模式匹配来判断内部存储的字符串信息。

1、语法

要知道,ReadOnlySpan<T> 类型是一个非常轻量级的存储集合,它类似于数组,但数组是引用类型,该类型是值类型。它可以接收很多类型的实例作为存储信息,当然,也包含 char。因此,C# 对这个类型有特殊处理:如果是 ReadOnlySpan<char> 的话,那么可以接收字符串来赋值:

而 C# 11 开始,我们支持该类型使用字符串的模式匹配规则来匹配该类型的对象。

比如这么使用。

2、null 对于 ReadOnlySpan<char> 的奇怪表现

请一定要注意,ReadOnlySpan<char> 是值类型,但你仍然可以赋个 null 过去:

这是被允许的。原因是 null 在这里是 char[]? 类型的对象,而对于 ReadOnlySpan<char>,是有一个隐式转换的,签名长这样:

因此你可以这么做。但是,由于赋值之后的 s 对象是值类型,因此你不能对 ReadOnlySpan<char> 类型的实例使用 null 常量模式匹配:

这样是错误的。因为模式匹配(尤其是关于 null 的常量模式),编译器是不知道你这个隐式转换的。这里的 s 是值类型 ReadOnlySpan<char> 类型的变量,而它既然是值类型,就永远不可能为 null。因此,is null 将永远返回 false。所以,这么使用是不合适的。

C# ReadOnlySpan 模式的评论 (共 条)

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