两个等价的ReadOnlySpan<Char>为何相等性检查不通过?
为什么两个内容一致的ReadOnlySpan相等性检查返回false?
先看你给出的代码:
ReadOnlySpan<char> s1 = "true false"[0..4]; ReadOnlySpan<char> s2 = "true"; Console.WriteLine(s1 == s2); // 输出 false
问题原因
ReadOnlySpanoperator==比较逻辑不是检查内容是否相等,而是验证底层内存的起始地址和Span长度是否完全匹配。
这里s1的底层内存来自字符串"true false",s2的底层内存来自字符串"true"——这是两个不同的字符串实例,内存起始地址不一样,所以即使内容和长度都相同,==操作符也会返回false。
正确的内容比较方式
要判断两个ReadOnlySpanSequenceEqual方法(无额外内存分配,推荐):
Console.WriteLine(s1.SequenceEqual(s2)); // 输出 true
如果不在意内存分配,也可以将Span转换为字符串后再比较:
Console.WriteLine(s1.ToString() == s2.ToString()); // 输出 true
内容的提问来源于stack exchange,提问作者Ricky Spanish
相关产品推荐
相关产品推荐

