I would expect "2-" and "22" to always compare the same way, but changing the 3rd character changes the sort order.
string.Compare("2-1","22-", StringComparison.CurrentCulture) //-1
string.Compare("2-2","22-", StringComparison.CurrentCulture) //1
What on earth is happening here?
Our culture is en-US by the way.
As per the documentation:
Character sets include ignorable characters. The
Compare(String, String, StringComparison)
method does not consider such characters when it performs a culture-sensitive comparison. To recognize ignorable characters in your comparison, supply a value ofStringComparison.Ordinal
orOrdinalIgnoreCase
for thecomparisonType
parameter.
In your case, the hyphen is an ignorable character. In this case it means that the middle hyphen isn't taken into account. That means it actually compares 21
and 22
to 22-
, which will evaluate to -1
and 1
respectively.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With