Difference entre la comparaison de chaines InvariantCulture et Ordinal

Difference entre la comparaison de chaines InvariantCulture et Ordinal

InvariantCulture

Utilise un ensemble “standard” d’ordres de caracteres (a, b, c, … etc.). Cela contraste avec certaines locales specifiques, qui peuvent trier les caracteres dans des ordres differents (‘a-avec-accent’ peut etre avant ou apres ‘a’, selon la locale, et ainsi de suite).

Ordinal

D’autre part, examine uniquement les valeurs des octets bruts qui representent le caractere.

Il y a un excellent exemple sur https://learn.microsoft.com/en-us/dotnet/api/system.string.compare qui montre les resultats des differentes valeurs de StringComparison. Tout a la fin, il montre (extrait) :

StringComparison.InvariantCulture:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is less than LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)

StringComparison.Ordinal:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is greater than LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)

Vous pouvez voir que la ou InvariantCulture donne (U+0069, U+0049, U+00131), Ordinal donne (U+0049, U+0069, U+00131).