You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

两个等价的ReadOnlySpan<Char>为何相等性检查不通过?

为什么两个内容一致的ReadOnlySpan相等性检查返回false?

先看你给出的代码:

ReadOnlySpan<char> s1 = "true false"[0..4];
ReadOnlySpan<char> s2 = "true";

Console.WriteLine(s1 == s2); // 输出 false

问题原因

ReadOnlySpan是值类型,它的默认operator==比较逻辑不是检查内容是否相等,而是验证底层内存的起始地址和Span长度是否完全匹配。
这里s1的底层内存来自字符串"true false",s2的底层内存来自字符串"true"——这是两个不同的字符串实例,内存起始地址不一样,所以即使内容和长度都相同,==操作符也会返回false。

正确的内容比较方式

要判断两个ReadOnlySpan的内容是否一致,应该使用SequenceEqual方法(无额外内存分配,推荐):

Console.WriteLine(s1.SequenceEqual(s2)); // 输出 true

如果不在意内存分配,也可以将Span转换为字符串后再比较:

Console.WriteLine(s1.ToString() == s2.ToString()); // 输出 true

内容的提问来源于stack exchange,提问作者Ricky Spanish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 14:25:19