我希望“2-”和“22”始终以相同的方式进行比较,但更改第3个字符会更改排序顺序。
string.Compare("2-1","22-", StringComparison.CurrentCulture) //-1
string.Compare("2-2","22-", StringComparison.CurrentCulture) //1
这里到底发生了什么?
顺便说一下,我们的文化是美国的。
答案 0 :(得分:8)
字符集包括可忽略的字符。
Compare(String, String, StringComparison)
方法在执行区分文化比较时不考虑此类字符。要在比较中识别可忽略的字符,请为StringComparison.Ordinal
参数提供OrdinalIgnoreCase
或comparisonType
的值。
在你的情况下,连字符是一个可忽略的字符。在这种情况下,它意味着不考虑中间连字符。这意味着它实际上会将21
和22
与22-
进行比较,后者将分别评估为-1
和1
。