string.ToLower () und string.ToLowerInvariant ()


Antworten:


148

Abhängig von der aktuellen Kultur erstellt ToLower möglicherweise einen kulturspezifischen Kleinbuchstaben, den Sie nicht erwarten. ınfoZum Beispiel ohne den Punkt auf dem i zu produzieren infound damit String-Vergleiche durcheinander zu bringen. Aus diesem Grund sollte ToLowerInvariant für nicht sprachspezifische Daten verwendet werden. Wenn Sie möglicherweise Benutzereingaben in ihrer Muttersprache / ihrem Zeichensatz haben, ist dies im Allgemeinen das einzige Mal, dass Sie ToLower verwenden.

In dieser Frage finden Sie ein Beispiel für dieses Problem: C # - ToLower () entfernt manchmal Punkte aus dem Buchstaben "I".


45

Ich denke, das kann nützlich sein:

http://msdn.microsoft.com/en-us/library/system.string.tolowerinvariant.aspx

aktualisieren

Wenn Ihre Anwendung davon abhängt, dass sich eine Zeichenfolge auf vorhersehbare Weise ändert und von der aktuellen Kultur nicht beeinflusst wird, verwenden Sie die ToLowerInvariant-Methode. Die ToLowerInvariant-Methode entspricht ToLower (CultureInfo.InvariantCulture). Die Methode wird empfohlen, wenn eine Sammlung von Zeichenfolgen in einer vorhersagbaren Reihenfolge in einem Steuerelement der Benutzeroberfläche angezeigt werden muss.

ebenfalls

... ToLower ist ToLowerInvariant an den meisten Orten sehr ähnlich. Die Dokumente zeigen, dass diese Methoden nur das Verhalten der türkischen Kulturen verändern werden. Auf Windows-Systemen unterscheidet das Dateisystem nicht zwischen Groß- und Kleinschreibung, wodurch die Verwendung weiter eingeschränkt wird ...

http://www.dotnetperls.com/tolowerinvariant-toupperinvariant

hth


@danyolgiax Bitte können Sie weiter ausführen? Ich kann seine Benutzerfreundlichkeit nicht aus dem Link von msdn ableiten. Danke
Prerak K

2
ja ToLowerInvariant funktioniert nicht wie erwartet auf Türkisch. İ wird ı
MonsterMMORPG

28

String.ToLower()verwendet die Standardkultur, während String.ToLowerInvariant()die invariante Kultur verwendet wird. Sie fragen also im Wesentlichen nach den Unterschieden zwischen der invarianten Kultur und dem Vergleich der Ordnungszahlen .


Nein, ist er nicht. "Ordinal" ist eine dritte Option - eine etwas andere Art, die aktuelle Kultur zu "ignorieren". Die Unterscheidung ist für die Erörterung von ToLowerVarianten nicht relevant . Ordinal vs. Invariant ändert nur die "Sortierreihenfolge" von zwei Zeichenfolgen, ändert aber nicht den Gleichheitsvergleich.
ToolmakerSteve

27

TL; DR:

Bei der Arbeit mit "Inhalten" (zB Artikel, Beiträge, Kommentare, Namen, Orte usw.) verwenden ToLower(). Wenn Sie mit "Literalen" arbeiten (z. B. Befehlszeilenargumente, benutzerdefinierte Grammatiken, Zeichenfolgen, die Aufzählungen sein sollten usw.), verwenden Sie ToLowerInvariant().

Beispiele:

= Verwendung ToLowerInvariantfalsch =

Bedeutet auf Türkisch DIŞ"draußen" und diş"Zahn". Das richtige untere Gehäuse DIŞist dış. Wenn Sie also ToLowerInvariantfalsch verwenden, können Tippfehler in der Türkei auftreten.

= Verwendung ToLowerfalsch =

Stellen Sie sich nun vor, Sie schreiben einen SQL-Parser. Irgendwo haben Sie Code, der aussieht wie:

if(operator.ToLower() == "like")
{
  // Handle an SQL LIKE operator
}

Die SQL-Grammatik ändert sich nicht, wenn Sie die Kulturen ändern. Ein Franzose schreibt nicht SÉLECTIONNEZ x DE booksstatt SELECT X FROM books. Damit der obige Code funktioniert, muss eine türkische Person schreiben SELECT x FROM books WHERE Author LİKE '%Adams%'(beachten Sie den Punkt über dem Großbuchstaben i, der fast unmöglich zu sehen ist). Dies wäre für Ihren türkischen Benutzer ziemlich frustrierend.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.