Durchführen kulturunabhängiger Schreibungsänderungen

Die Methoden String.ToUpper, String.ToLower, Char.ToUpper und Char.ToLower stellen Überladungen bereit, die keine Parameter akzeptieren. Standardmäßig führen diese Überladungen ohne Parameter die Schreibungsänderungen auf Basis des CultureInfo.CurrentCulture-Werts durch. Die unter Berücksichtigung der Groß-/Kleinschreibung erzielten Ergebnisse variieren je nach Kultur. Um klar anzugeben, ob die Schreibungsänderungen kulturabhängig oder kulturunabhängig erfolgen sollen, empfiehlt sich die Verwendung der Überladungen dieser Methoden, für die explizit ein culture-Parameter festgelegt werden muss. Um kulturabhängige Schreibungsänderungen zu aktivieren, geben Sie CultureInfo.CurrentCulture für den culture-Parameter an. Um kulturunabhängige Schreibungsänderungen zu aktivieren, geben Sie CultureInfo.InvariantCulture für den culture-Parameter an.

Häufig werden Zeichenfolgen in eine Standardschreibweise konvertiert, um spätere Suchvorgänge zu vereinfachen. Wenn Zeichenfolgen auf diese Weise verwendet werden, sollte CultureInfo.InvariantCulture für den culture-Parameter angegeben werden, da sich der Wert von Thread.CurrentCulture zwischen dem Zeitpunkt der Schreibungsänderung und dem Zeitpunkt des Suchvorgangs ändern kann.

Wenn darüber hinaus eine Sicherheitsentscheidung auf einer Änderung von Groß- und Kleinschreibung beruht, sollte die Operation kulturunabhängig sein, um sicherzustellen, dass das Ergebnis nicht durch den Wert von CultureInfo.CurrentCulture beeinflusst wird. Im Abschnitt „Zeichenfolgenvergleiche mit der aktuellen Kultur“ im Artikel Bewährte Methoden für die Verwendung von Zeichenfolgen in .NET finden Sie ein Beispiel, das veranschaulicht, wie kulturabhängige Zeichenfolgenoperationen zu inkonsistenten Ergebnissen führen können.

String.ToUpper und String.ToLower

Aus Gründen der Übersichtlichkeit des Codes empfiehlt es sich, immer Überladungen der Methoden String.ToUpper und String.ToLower zu verwenden, mit denen Sie eine Kultur explizit angeben können. Mit dem folgenden Code wird z. B. nach einem Bezeichner gesucht. In der Standardeinstellung ist die key.ToLower-Operation kulturabhängig, jedoch wird dieses Verhalten beim Lesen des Codes nicht deutlich.

Beispiel

Shared Function LookupKey(key As String) As Object
   Return internalHashtable(key.ToLower())
End Function
static object LookupKey(string key)
{
    return internalHashtable[key.ToLower()];
}

Wenn Sie einen kulturunabhängigen key.ToLower-Vorgang ausführen möchten, ändern Sie das vorige Beispiel so, dass beim Ändern der Schreibweise CultureInfo.InvariantCulture explizit verwendet wird.

Shared Function LookupKey(key As String) As Object
    Return internalHashtable(key.ToLower(CultureInfo.InvariantCulture))
End Function
static object LookupKey(string key)
{
    return internalHashtable[key.ToLower(CultureInfo.InvariantCulture)];
}

Char.ToUpper und Char.ToLower

Obwohl die Methoden Char.ToUpper und Char.ToLower über die gleichen Eigenschaften wie die Methoden String.ToUpper und String.ToLower verfügen, sind nur die Kulturen „Türkisch (Türkei)“ und „Aserbaidschanisch (lateinisch, Aserbaidschan)“ betroffen. Hierbei handelt es sich um die beiden einzigen Kulturen mit Unterschieden in der Groß-/Kleinschreibung für ein einzelnes Zeichen. Weitere Informationen über diese Besonderheit bei der Groß-/Kleinschreibung finden Sie im Abschnitt „Groß-/Kleinschreibung“ in der Dokumentation zur String-Klasse. Aus Gründen der Übersichtlichkeit des Codes und zur Gewährleistung konsistenter Ergebnisse, sollten Sie immer die Überladungen dieser Methoden verwenden, die einen CultureInfo-Parameter akzeptieren.

Weitere Informationen