Share via


Durchführen kulturunabhängiger Zeichenfolgenvergleiche

In der Standardeinstellung führt die String.Compare-Methode kulturabhängige Vergleiche sowie Vergleiche unter Berücksichtigung der Groß-/Kleinschreibung aus. Diese Methode schließt auch mehrere Überladungen ein, die einen culture-Parameter zur Angabe der zu verwendenden Kultur und einen comparisonType-Parameter zur Angabe der zu verwendenden Vergleichsregeln bereitstellen. Durch den Aufruf dieser Methoden statt der Standardüberladung wird jede Mehrdeutigkeit hinsichtlich der in einem bestimmten Methodenaufruf verwendeten Regeln vermieden. Es wird verdeutlicht, ob ein bestimmter Vergleich kulturabhängig oder kulturunabhängig ist.

HinweisHinweis

Beide Überladungen der String.CompareTo-Methode führen kulturabhängige Vergleiche durch, bei denen die Groß- und Kleinschreibung berücksichtigt wird. Sie können kulturunabhängige Vergleiche nicht mithilfe dieser Methode ausführen.Aus Gründen der Übersichtlichkeit des Codes wird empfohlen, stattdessen die String.Compare-Methode zu verwenden.

Geben Sie für kulturabhängige Vorgänge den StringComparison.CurrentCulture-Enumerationswert oder den StringComparison.CurrentCultureIgnoreCase-Enumerationswert als comparisonType-Parameter an. Wenn Sie einen kulturabhängigen Vergleich mithilfe einer anderen festgelegte Kultur als der aktuellen Kultur ausführen möchten, geben Sie das CultureInfo-Objekt an, das diese Kultur als culture -Parameter darstellt.

Die kulturunabhängigen von der String.Compare-Methode unterstützten Zeichenfolgenvergleiche sind entweder linguistisch (auf Grundlage der Sortierkonventionen der invarianten Kultur) oder nicht linguistisch (auf Grundlage des Ordnungswerts der Zeichen in der Zeichenfolge). Die meisten kulturunabhängigen Zeichenfolgenvergleiche sind nicht linguistisch. Geben Sie den StringComparison.Ordinal-Enumerationswert oder den StringComparison.OrdinalIgnoreCase-Enumerationswert als comparisonType-Parameter für diese Vergleiche an. Wenn beispielsweise eine Sicherheitsentscheidung (z. B. ein Benutzername oder ein Kennwortvergleich) auf dem Ergebnis eines Zeichenfolgenvergleichs basiert, sollte der Vorgang kulturunabhängig und nicht linguistisch sein, um sicherzustellen, dass das Ergebnis nicht von den Konventionen einer bestimmten Kultur oder Sprache beeinflusst wird. (Ein Beispiel, in dem gezeigt wird, wie kulturabhängige Zeichenfolgenvergleiche zu inkonsistenten Ergebnissen führen können, finden Sie unter Benutzerdefinierte Schreibungszuordnungen und Sortierregeln).

Verwenden Sie einen kulturunabhängigen linguistischen Zeichenfolgenvergleich, wenn Sie linguistisch relevante Zeichenfolgen mehrerer Kulturen auf eine konsistente Weise behandeln möchten. Wenn die Anwendung z. B. Wörter anzeigt, die mehrere Zeichensätze in einem Listenfeld verwenden, können Sie Wörter in der gleichen Reihenfolge unabhängig von der aktuellen Kultur anzeigen. Für kulturunabhängige linguistische Vergleiche definiert .NET Framework eine invariante Kultur, die auf den linguistischen Konventionen der englischen Sprache basiert. Geben Sie StringComparison.InvariantCulture oder StringComparison.InvariantCultureIgnoreCase als comparisonType-Parameter an, um einen kulturunabhängigen linguistischen Vergleich auszuführen.

Im folgenden Beispiel werden zwei kulturunabhängige, nicht linguistische Zeichenfolgenvergleiche ausgeführt. Beim ersten Beispiel wird die Groß-/Kleinschreibung beachtet, beim zweiten nicht.

Public Class CompareSample
    Public Shared Sub Main()
        Dim string1 As String = "file"
        Dim string2 As String = "FILE"
        Dim compareResult As Integer

        compareResult = String.Compare(string1, string2, _
                                       StringComparison.Ordinal)   
        Console.WriteLine("{0} comparison of '{1}' and '{2}': {3}", 
                          StringComparison.Ordinal, string1, string2, 
                          compareResult) 

        compareResult = String.Compare(string1, string2, 
                                       StringComparison.OrdinalIgnoreCase)
        Console.WriteLine("{0} comparison of '{1}' and '{2}': {3}", 
                          StringComparison.OrdinalIgnoreCase, string1, string2, 
                          compareResult) 
    End Sub
End Class
' The example displays the following output:
'    Ordinal comparison of 'file' and 'FILE': 32
'    OrdinalIgnoreCase comparison of 'file' and 'FILE': 0
using System;

public class CompareSample
{
    public static void Main()
    {
        string string1 = "file";
        string string2 = "FILE";
        int compareResult = 0;

        compareResult = String.Compare(string1, string2, 
                                       StringComparison.Ordinal);
        Console.WriteLine("{0} comparison of '{1}' and '{2}': {3}", 
                          StringComparison.Ordinal, string1, string2, 
                          compareResult); 

        compareResult = String.Compare(string1, string2, 
                                       StringComparison.OrdinalIgnoreCase);
        Console.WriteLine("{0} comparison of '{1}' and '{2}': {3}", 
                          StringComparison.OrdinalIgnoreCase, string1, string2, 
                          compareResult); 
    }
}
// The example displays the following output:
//    Ordinal comparison of 'file' and 'FILE': 32
//    OrdinalIgnoreCase comparison of 'file' and 'FILE': 0

Siehe auch

Referenz

String.Compare

String.CompareTo

Konzepte

Vergleichen und Sortieren von Daten für eine bestimmte Kultur

Empfohlene Vorgehensweisen für die Verwendung von Zeichenfolgen in .NET Framework

Weitere Ressourcen

Durchführen kulturunabhängiger Zeichenfolgenoperationen

Änderungsprotokoll

Datum

Versionsgeschichte

Grund

Mai 2010

Überarbeitet, um Best Practices für das Behandeln von Zeichenfolgen zu berücksichtigen.

Korrektur inhaltlicher Fehler.