- int n = string.Compare("a", "A");
- Console.WriteLine(n);
复制代码
我们可以看到n是等于-1的也就是a小于A,但是直观上感觉a应该是A大的,毕竟转换成16进制是0x61肯定比0x41大。
参数说明如下:
- //
- // 摘要:
- // 比较两个指定的 System.String 对象,并返回一个指示二者在排序顺序中的相对位置的整数。
- //
- // 参数:
- // strA:
- // 要比较的第一个字符串。
- //
- // strB:
- // 要比较的第二个字符串。
- //
- // 返回结果:
- // 一个 32 位带符号整数,指示两个比较数之间的词法关系。值Condition小于零strA 小于 strB。零strA 等于 strB。大于零strA 大于
复制代码
也就是说,如果前面的字符串小于后面字符串就是-1,相等就是0,大于就是1,那么这个比较基准是怎么比较的呢?
一直以为基于ASCII,但是后面想想应该是基于UNICODE的编码顺序,毕竟字符串范围不仅限于ASCII,但是这里却不是简单的UNICODE顺序,而且基于一套排序算法。
大家可以在此下载排序权重表(Sorting Weight Tables):
https://www.microsoft.com/en-us/download/details.aspx?id=10921
我是win10 2004,所以下载win10版本的,对应文件名为:Windows 10 Sorting Weight Table.txt
然后我们打开该txt找到我们的字符串“a”和“A”对应的十六进制编码,看看他们的权重:
由此可以看到,虽然十六进制a比A大,但是a的权重却低于A,所以返回-1。
|