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.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.