String.CompareTo与case

Moe*_*sko 9 .net c#

示例代码说明:

    int res1 = "a".CompareTo("A");  // res1 = -1
    int res2 = "ab".CompareTo("A");  // res2 = 1
Run Code Online (Sandbox Code Playgroud)

我看到了res1 = -1,res2 = 1最后,这有点出乎意料.我认为res1会返回1,因为在ASCII图表上"A"(0x41)出现在"a"(0x61)之前.

而且,似乎很奇怪,因为res2字符串的长度似乎有所不同.即如果"a"出现在"A"之前(如res1 = -1所示),那么我会认为"a"withAnythingAfterIt也会出现在"A"withAnythingAfterIt之前.

有人可以解释一下吗?谢谢.

Lou*_*ier 5

这是预期的行为.String.CompareTo(string)使用其排序顺序进行文化敏感性比较.实际上它正在调用CultureInfo我们在源代码中看到的工作:

public int CompareTo(String strB) {
    if (strB==null) {
        return 1;
    }

    return CultureInfo.CurrentCulture.CompareInfo.Compare(this, strB, 0);
}
Run Code Online (Sandbox Code Playgroud)

你现在的文化在排序顺序中把'A'放在'a'之后,因为它会是一个平局,但不会在'ab'之后,因为在我知道的大多数排序顺序中,'ab'明显地出现在'a'或'A'之后.它只是执行其工作的打破平局机制:当排序顺序相同时,使用序数值!