System.String==重载and运算符!=,但它们都调用Equals. 该方法的第一部分是不言自明的,它将引用/长度/与 null 进行比较。但我不清楚第二部分。该方法称为SpanHelper.SequenceEquals. 他在做什么?只有第一个char比较的字符串被传递到那里,转换为byte,然后什么都不清楚。
System.String==重载and运算符!=,但它们都调用Equals. 该方法的第一部分是不言自明的,它将引用/长度/与 null 进行比较。但我不清楚第二部分。该方法称为SpanHelper.SequenceEquals. 他在做什么?只有第一个char比较的字符串被传递到那里,转换为byte,然后什么都不清楚。
对不起,如果我在解释显而易见的事情
但是,在我看来,有一个非常清晰的算法:
比较之后(“如果两者都为空怎么办 - 哦!应该返回真!”)
比较字符串长度。长度不相等吗?- 返回错误!
当两个字符串的长度相等时,我们还有一个选择。
然后调用了一个优化版本的序列比较——这个就是 SequenceCompareTo()
传输第一个字节的原因是:因为那里的所有内容都标记为 Unsafe,然后获取第一个字节并知道长度,您可以遍历字节序列,增加索引(并且由于 ansave,而不必害怕命中序列边界并获得异常)
像这样的东西。
当然,这种狡猾的类型转换永远不会在我的噩梦中发生,但一切看起来都很合乎逻辑。
我对其他一些事情感到有些惊讶——即逐字节比较,而无需切换到使用 64 位字的处理器指令......