5 votes

Le caractère après le trait d'union affecte la chaîne de caractères.compare

Je m'attendrais à ce que "2-" et "22" soient toujours comparés de la même manière, mais le changement du troisième caractère modifie l'ordre de tri.

string.Compare("2-1","22-", StringComparison.CurrentCulture) //-1
string.Compare("2-2","22-", StringComparison.CurrentCulture) //1

Que diable se passe-t-il ici ?

Au fait, notre culture est en-US.

8voto

Patrick Hofman Points 22166

Conformément à la documentation :

Les jeux de caractères comprennent des caractères ignorables. Le site Compare(String, String, StringComparison) ne tient pas compte de ces caractères lorsqu'elle effectue une comparaison sensible à la culture. Pour reconnaître les caractères ignorables dans votre comparaison, fournissez une valeur de StringComparison.Ordinal o OrdinalIgnoreCase para la comparisonType paramètre.

Dans votre cas, le trait d'union est un caractère ignorable. Dans ce cas, cela signifie que le trait d'union du milieu n'est pas pris en compte. Cela signifie qu'il compare en fait 21 y 22 a 22- qui sera évalué à -1 y 1 respectivement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X