Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Character after hyphen affects string.compare

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.

like image 911
Billy Jake O'Connor Avatar asked Jun 21 '17 12:06

Billy Jake O'Connor


Video Answer


1 Answers

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 of StringComparison.Ordinal or OrdinalIgnoreCase for the comparisonType 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.

like image 53
Patrick Hofman Avatar answered Sep 21 '22 13:09

Patrick Hofman