连字符后的字符会影响string.compare

时间:2017-06-21 12:11:37

标签: c# string-comparison

我希望“2-”和“22”始终以相同的方式进行比较,但更改第3个字符会更改排序顺序。

string.Compare("2-1","22-", StringComparison.CurrentCulture) //-1
string.Compare("2-2","22-", StringComparison.CurrentCulture) //1

这里到底发生了什么?

顺便说一下,我们的文化是美国的。

1 个答案:

答案 0 :(得分:8)

根据documentation

  

字符集包括可忽略的字符。 Compare(String, String, StringComparison)方法在执行区分文化比较时不考虑此类字符。要在比较中识别可忽略的字符,请为StringComparison.Ordinal参数提供OrdinalIgnoreCasecomparisonType的值。

在你的情况下,连字符是一个可忽略的字符。在这种情况下,它意味着不考虑中间连字符。这意味着它实际上会将212222-进行比较,后者将分别评估为-11