C # - string.Compare with char '-' hat ein seltsames Verhalten [Duplikat]
int i;
i = String.Compare("A-", "A0"); // i = -1 -> OK
i = String.Compare("A-A", "A0A"); // i = 1 -> WHY ?
Ich verstehe nicht, warum das Anhängen des gleichen Buchstabens 'A' an beide Texte den zurückgegebenen Wert ändern kann.
Ich weiß, dass String.CompareOrdinal in beiden Fällen den korrekten negativen Wert zurückgibt. Ich würde gerne wissen, warum String.Compare dies nicht tut.
Antworten
Einfach ausgedrückt, der Bindestrich wird ignoriert. Das Folgende würde die gleichen Ergebnisse liefern
var ads = new[] {"A", "A0", "AA", "A0A"};
Console.WriteLine(string.Join(",",ads.OrderBy(x => x)));
String.Compare-Methode
Hinweise für Anrufer
Zeichensätze enthalten ignorierbare Zeichen. Die Compare-Methode (String, String) berücksichtigt solche Zeichen nicht, wenn sie einen kultursensitiven Vergleich durchführt. Wenn beispielsweise der folgende Code in .NET Framework 4 oder höher ausgeführt wird, zeigt ein kultursensitiver Vergleich von "animal" mit "ani-mal" (unter Verwendung eines weichen Bindestrichs oder U + 00AD) an, dass die beiden Zeichenfolgen sind Äquivalen
Außerdem
Um ignorierbare Zeichen in einem Zeichenfolgenvergleich zu erkennen, rufen Sie die Compare-Methode (String, String, StringComparison) auf und geben Sie für den Parameter compareType den Wert Ordinal oder OrdinalIgnoreCase an.