【发布时间】:2019-08-20 09:12:30
【问题描述】:
在 C# 中,"123-delete.json".CompareTo("123.json") 的计算结果为 1,这意味着 "123-delete.json" 将排在 "123.json" 之后。
这对我来说是出乎意料的,因为根据 ASCII 表 . 在 - 之后。
我试图浏览 GitHub 上的 CompareTo 实现,但似乎这个逻辑是在本机函数 (InternalCompareString) 中实现的。
为什么CompareTo 方法不遵循 ASCII 顺序?
另外,有没有办法查看InternalCompareString等原生函数的源代码?
【问题讨论】:
-
在 c# 中,字符串是 unicode 字符的序列。并且比较取决于文化,
CompareTo没有CultureInfo参数使用当前线程的CultureInfo。 -
@RenéVogt,到底发生了什么?如何比较它们以产生这个结果?
-
请注意,
string.CompareOrdinal可能是您在这里所追求的。 -
Unicode 不是 ASCII,所以这可能就是您得到这些结果的原因。 differencebetween.net/technology/software-technology/…
-
@RenéVogt,1) Unicode 和 ASCII 在开头匹配。 2) 不,我在这里测试过:rextester.com 和
"-".CompareTo(".")返回-1,而"-a".CompareTo(".b")返回1。所以比较规则比较复杂。