我有一个使用string.compare(string,string)的应用程序来排序一些值.我无法弄清楚的是为什么"1022"比小于"10-23"和"10-23"的比较小于"1024".
" - "的值是否有特定的东西会导致这种结果?对于相同类型的数据(带破折号的数字),string.compare的重载是否会为不同的文化设置提供相同的结果?
从string.Compare(String,String)的文档中:
使用单词排序规则进行比较.
并进一步:
.NET Framework使用三种不同的排序方式:单词排序,字符串排序和顺序排序.单词排序执行文化敏感的字符串比较.某些非字母数字字符可能会分配特殊权重.例如,连字符(" - ")可能具有非常小的权重,因此"coop"和"co-op"在排序列表中彼此相邻.字符串排序类似于单词排序,除了没有特殊情况.因此,所有非字母数字符号都在所有字母数字字符之前.序数排序根据字符串的每个元素的Unicode值比较字符串.
Michael Kaplan在这里提供了更多细节:排序键的A&P,第9部分(又名并非总是传递,但是准时和标点).