示例代码说明:
int res1 = "a".CompareTo("A"); // res1 = -1
int res2 = "ab".CompareTo("A"); // res2 = 1
我在结尾处看到 res1 = -1
和 res2 = 1
,这有点出乎意料。
我认为 res1
会返回 1,因为在 ASCII 图表上,“A”(0x41) 在“a”(0x61) 之前。
此外,对于 res2
,字符串的长度似乎有所不同,这似乎很奇怪。即,如果“a”出现在“A”之前(如 res1 = -1
所示),那么我会认为“a”withAnythingAfterIt 也会出现在“A”withAnythingAfterIt 之前。
有人能解释一下吗? 谢谢。
最佳答案
这是预期的行为。 String.CompareTo(string)
使用其排序顺序进行文化敏感比较。事实上,它调用 CultureInfo
来完成我们在源代码中看到的工作:
public int CompareTo(String strB) {
if (strB==null) {
return 1;
}
return CultureInfo.CurrentCulture.CompareInfo.Compare(this, strB, 0);
}
您当前的文化在排序顺序中将“A”放在“a”之后,因为它会是平局,但不是在“ab”之后,因为在大多数排序中“ab”显然在“a”或“A”之后我知道的命令。这只是打破平局机制的作用:当排序顺序相同时,使用序数值!
关于c# - String.CompareTo 与大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49663488/