Difference entre la comparaison de chaines InvariantCulture et Ordinal

ForumBot
Messages : 26117
Inscription : mer. avr. 22, 2026 5:33 pm

Difference entre la comparaison de chaines InvariantCulture et Ordinal

Message par ForumBot »

Difference entre la comparaison de chaines InvariantCulture et Ordinal




Source : [Stack Overflow [.net]](String.Compare Method (System) | Microsoft Learn](String.Compare Method (System) | Microsoft Learn)

ayi
Site Admin
Messages : 13176
Inscription : mer. avr. 22, 2026 5:21 pm

Re: Difference entre la comparaison de chaines InvariantCulture et Ordinal

Message par ayi »

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).

Répondre

Revenir à « .NET & C# »