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()
?
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()
?
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 produzieren info
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".
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
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 .
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 Sie ToLowerInvariant()
.
Beispiele:
= Verwendung ToLowerInvariant
falsch =
Bedeutet auf Türkisch DIŞ
"draußen" und diş
"Zahn". Das richtige untere Gehäuse DIŞ
ist dış
. Wenn Sie also ToLowerInvariant
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:
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 books
statt 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.