C # - string.Compare with char '-' hat ein seltsames Verhalten [Duplikat]

Aug 26 2020
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

3 00110001 Aug 26 2020 at 23:04

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.