Was ist der Unterschied und wann was zu verwenden? Was ist das Risiko, wenn ich immer benutze ToLower()und was ist das Risiko, wenn ich immer benutze ToLowerInvariant()?
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.
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 ...
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.
Antworten:
Abhängig von der aktuellen Kultur erstellt ToLower möglicherweise einen kulturspezifischen Kleinbuchstaben, den Sie nicht erwarten.
ınfo
Zum Beispiel ohne den Punkt auf dem i zu produziereninfo
und 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".
quelle
Ich denke, das kann nützlich sein:
http://msdn.microsoft.com/en-us/library/system.string.tolowerinvariant.aspx
aktualisieren
ebenfalls
http://www.dotnetperls.com/tolowerinvariant-toupperinvariant
hth
quelle
String.ToLower()
verwendet die Standardkultur, währendString.ToLowerInvariant()
die invariante Kultur verwendet wird. Sie fragen also im Wesentlichen nach den Unterschieden zwischen der invarianten Kultur und dem Vergleich der Ordnungszahlen .quelle
ToLower
Varianten nicht relevant . Ordinal vs. Invariant ändert nur die "Sortierreihenfolge" von zwei Zeichenfolgen, ändert aber nicht den Gleichheitsvergleich.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 SieToLowerInvariant()
.Beispiele:
= Verwendung
ToLowerInvariant
falsch =Bedeutet auf Türkisch
DIŞ
"draußen" unddiş
"Zahn". Das richtige untere GehäuseDIŞ
istdış
. Wenn Sie alsoToLowerInvariant
falsch verwenden, können Tippfehler in der Türkei auftreten.= Verwendung
ToLower
falsch =Stellen Sie sich nun vor, Sie schreiben einen SQL-Parser. Irgendwo haben Sie Code, der aussieht wie:
Die SQL-Grammatik ändert sich nicht, wenn Sie die Kulturen ändern. Ein Franzose schreibt nicht
SÉLECTIONNEZ x DE books
stattSELECT X FROM books
. Damit der obige Code funktioniert, muss eine türkische Person schreibenSELECT 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.quelle