示例代码说明:
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之前。
有人能说些什么吗? 感谢。
答案 0 :(得分:5)
这是预期的行为。 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'之后出现在大多数类型中订单我知道。它只是执行其工作的打折机制:当排序顺序相同时,使用序数值!
答案 1 :(得分:1)
来自MSDN
定义
将此实例与指定的Object进行比较并指示是否 此实例在...之前,之后或出现在同一位置 排序顺序作为指定的对象。
请注意
CompareTo方法主要用于排序或 按字母顺序排列的操作。主要时不应该使用它 方法调用的目的是确定是否有两个字符串 当量。要确定两个字符串是否相同,请调用 等于方法。
CompareTo
是一种实例方法。
如果第一个字符串较大,则结果为1.如果第一个字符串较小,则结果为-1。如果两个字符串相等,则结果为0.该数字实质上表示第一个字符串的“大”数。
Console.WriteLine("a".CompareTo("A")); // -1
Console.WriteLine("ab".CompareTo("A")); // 1
Console.WriteLine("a".CompareTo("a")); // 1
Console.WriteLine("ab".CompareTo("AB")); // -1
Console.WriteLine("A".CompareTo("a")); // 1
Console.WriteLine("AB".CompareTo("ab")); // 1
Console.WriteLine("A".CompareTo("A")); // 0