Durchführen kulturunabhängiger Zeichenfolgenoperationen in AuflistungenPerforming Culture-Insensitive String Operations in Collections

Der System.Collections-Namespace enthält Klassen und Member, die standardmäßig kulturabhängiges Verhalten bereitstellen.There are classes and members in the System.Collections namespace that provide culture-sensitive behavior by default. Die parameterlosen Konstruktoren für die CaseInsensitiveComparer- und CaseInsensitiveHashCodeProvider-Klasse initialisieren eine neue Instanz mit der Thread.CurrentCulture-Eigenschaft.The parameterless constructors for the CaseInsensitiveComparer and CaseInsensitiveHashCodeProvider classes initialize a new instance using the Thread.CurrentCulture property. Alle Überladungen der CollectionsUtil.CreateCaseInsensitiveHashtable-Methode erstellen eine neue Instanz der Hashtable-Klasse standardmäßig mit der Thread.CurrentCulture-Eigenschaft.All overloads of the CollectionsUtil.CreateCaseInsensitiveHashtable method create a new instance of the Hashtable class using the Thread.CurrentCulture property by default. Überladungen der ArrayList.Sort-Methode führen kulturabhängige Sortierungen standardmäßig mit der Thread.CurrentCulture-Eigenschaft aus.Overloads of the ArrayList.Sort method perform culture-sensitive sorts by default using Thread.CurrentCulture. Wenn Zeichenfolgen als Schlüssel verwendet werden, kann sich SortedList auf das Sortieren und Nachschlagen in einer Thread.CurrentCulture-Instanz auswirken.Sorting and lookup in a SortedList can be affected by Thread.CurrentCulture when strings are used as the keys. Befolgen Sie die Verwendungsempfehlungen in diesem Abschnitt, um aus diesen Klassen und Methoden im Collections-Namespace kulturunabhängige Ergebnisse abzurufen.Follow the usage recommendations provided in this section to obtain culture-insensitive results from these classes and methods in the Collections namespace.

Hinweis Wenn Sie CultureInfo.InvariantCulture an eine Vergleichsmethode übergeben, wird ein kulturunabhängiger Vergleich ausgeführt.Note Passing CultureInfo.InvariantCulture to a comparison method does perform a culture-insensitive comparison. Dies bewirkt jedoch keinen nicht linguistischen Vergleich, z. B. auf Dateipfade, Registrierungsschlüssel und Umgebungsvariablen.However, it does not cause a non-linguistic comparison, for example, for file paths, registry keys, and environment variables. Und dadurch werden auch keine Sicherheitsentscheidungen anhand des Vergleichsergebnisses unterstützt.Neither does it support security decisions based on the comparison result. Für einen nicht linguistischen Vergleich oder Unterstützung für ergebnisbasierte Sicherheitsentscheidungen sollte die Anwendung eine Vergleichsmethode verwenden, die einen StringComparison-Wert akzeptiert.For a non-linguistic comparison or support for result-based security decisions, the application should use a comparison method that accepts a StringComparison value. Die Anwendung sollte dann StringComparison übergeben.The application should then pass StringComparison.

Verwenden der CaseInsensitiveComparer- und der CaseInsensitiveHashCodeProvider-KlasseUsing the CaseInsensitiveComparer and CaseInsensitiveHashCodeProvider Classes

Die parameterlosen Konstruktoren für CaseInsensitiveHashCodeProvider und CaseInsensitiveComparer initialisieren eine neue Instanz der Klasse mit Thread.CurrentCulture, was zu kulturabhängigem Verhalten führt.The parameterless constructors for CaseInsensitiveHashCodeProvider and CaseInsensitiveComparer initialize a new instance of the class using the Thread.CurrentCulture, resulting in culture-sensitive behavior. Im folgenden Codebeispiel wird der Konstruktor für eine Hashtable-Instanz veranschaulicht, die kulturabhängig ist, weil für sie die parameterlosen Konstruktoren für CaseInsensitiveHashCodeProvider und CaseInsensitiveComparer verwendet werden.The following code example demonstrates the constructor for a Hashtable that is culture-sensitive because it uses the parameterless constructors for CaseInsensitiveHashCodeProvider and CaseInsensitiveComparer.

internalHashtable = New Hashtable(CaseInsensitiveHashCodeProvider.Default, CaseInsensitiveComparer.Default)  
internalHashtable = new Hashtable(CaseInsensitiveHashCodeProvider.Default, CaseInsensitiveComparer.Default);  

Wenn Sie eine kulturunabhängige Hashtable-Instanz über die Klassen CaseInsensitiveComparer und CaseInsensitiveHashCodeProvider erstellen möchten, initialisieren Sie neue Instanzen dieser Klassen mit den Konstruktoren, die einen culture-Parameter akzeptieren.If you want to create a culture-insensitive Hashtable using the CaseInsensitiveComparer and CaseInsensitiveHashCodeProvider classes, initialize new instances of these classes using the constructors that accept a culture parameter. Für den culture-Parameter geben Sie CultureInfo.InvariantCulture an.For the culture parameter, specify CultureInfo.InvariantCulture. Im folgenden Codebeispiel wird der Konstruktor für eine kulturunabhängige Hashtable-Instanz veranschaulicht.The following code example demonstrates the constructor for a culture-insensitive Hashtable.

internalHashtable = New Hashtable(New  
    CaseInsensitiveHashCodeProvider(CultureInfo.InvariantCulture),  
    New CaseInsensitiveComparer(CultureInfo.InvariantCulture))  
internalHashtable = new Hashtable(new CaseInsensitiveHashCodeProvider  
    (CultureInfo.InvariantCulture),   
    new CaseInsensitiveComparer(CultureInfo.InvariantCulture));  

Verwenden der CollectionsUtil.CreateCaseInsensitiveHashtable-MethodeUsing the CollectionsUtil.CreateCaseInsensitiveHashTable Method

Die CollectionsUtil.CreateCaseInsensitiveHashTable-Methode ist eine nützliche Abkürzung zum Erstellen einer neuen Instanz der Hashtable-Klasse, in der die Groß-/Kleinschreibung von Zeichenfolgen ignoriert wird.The CollectionsUtil.CreateCaseInsensitiveHashTable method is a useful shortcut for creating a new instance of the Hashtable class that ignores the case of strings. Alle Überladungen der CollectionsUtil.CreateCaseInsensitiveHashTable-Methode sind jedoch kulturabhängig, da in ihnen die Thread.CurrentCulture-Eigenschaft verwendet wird.However, all overloads of the CollectionsUtil.CreateCaseInsensitiveHashTable method are culture-sensitive because they use the Thread.CurrentCulture property. Sie können mit dieser Methode keine kulturunabhängige Hashtable-Instanz erstellen.You cannot create a culture-insensitive Hashtable using this method. Um eine kulturunabhängige Hashtable-Instanz zu erstellen, verwenden Sie den Hashtable-Konstruktor, der einen culture-Parameter akzeptiert.To create a culture-insensitive Hashtable, use the Hashtable constructor that accepts a culture parameter. Für den culture-Parameter geben Sie CultureInfo.InvariantCulture an.For the culture parameter, specify CultureInfo.InvariantCulture. Im folgenden Codebeispiel wird der Konstruktor für eine kulturunabhängige Hashtable-Instanz veranschaulicht.The following code example demonstrates the constructor for a culture-insensitive Hashtable.

internalHashtable = New Hashtable(New  
    CaseInsensitiveHashCodeProvider(CultureInfo.InvariantCulture),  
    New CaseInsensitiveComparer(CultureInfo.InvariantCulture))  
internalHashtable = new Hashtable(new CaseInsensitiveHashCodeProvider  
    (CultureInfo.InvariantCulture),   
    new CaseInsensitiveComparer(CultureInfo.InvariantCulture));  

Verwenden der SortedList-KlasseUsing the SortedList Class

Eine SortedList-Instanz entspricht einer Auflistung von Schlüssel-Wert-Paaren, die nach Schlüsseln sortiert sind und auf die sowohl über Schlüssel als auch über Index zugegriffen werden kann.A SortedList represents a collection of key-and-value pairs that are sorted by the keys and are accessible by key and by index. Wenn Sie eine SortedList-Instanz verwenden, in der Zeichenfolgen als Schlüssel verwendet werden, können Sortier- und Nachschlagevorgänge durch die Thread.CurrentCulture-Eigenschaft beeinflusst werden.When you use a SortedList where strings are the keys, the sorting and lookup can be affected by the Thread.CurrentCulture property. Um für eine SortedList-Instanz kulturunabhängiges Verhalten zu erzielen, erstellen Sie die SortedList-Instanz mit einem Konstruktor, der einen comparer-Parameter akzeptiert.To obtain culture-insensitive behavior from a SortedList, create a SortedList using one of the constructors that accepts a comparer parameter. Der comparer-Parameter gibt die IComparer-Implementierung an, die beim Vergleich von Schlüsseln zu verwenden ist.The comparer parameter specifies the IComparer implementation to use when comparing keys. Geben Sie für den Parameter eine benutzerdefinierte Comparer-Klasse an, in der CultureInfo.InvariantCulture verwendet wird, um Schlüssel zu vergleichen.For the parameter, specify a custom comparer class that uses CultureInfo.InvariantCulture to compare keys. Das folgende Beispiel veranschaulicht eine benutzerdefinierte kulturunabhängige Comparer-Klasse, die Sie als comparer-Parameter für einen SortedList-Konstruktor angeben können.The following example illustrates a custom culture-insensitive comparer class that you can specify as the comparer parameter to a SortedList constructor.

Imports System  
Imports System.Collections  
Imports System.Globalization  
  
Friend Class InvariantComparer  
    Implements IComparer   
    Private m_compareInfo As CompareInfo  
    Friend Shared [Default] As New InvariantComparer()  
  
    Friend Sub New()  
        m_compareInfo = CultureInfo.InvariantCulture.CompareInfo  
    End Sub     
  
    Public Function Compare(a As Object, b As Object) As Integer _  
            Implements IComparer.Compare  
        Dim sa As String = CType(a, String)  
        Dim sb As String = CType(b, String)  
        If Not (sa Is Nothing) And Not (sb Is Nothing) Then  
            Return m_compareInfo.Compare(sa, sb)  
        Else  
            Return Comparer.Default.Compare(a, b)  
        End If  
    End Function  
End Class  
using System;  
using System.Collections;  
using System.Globalization;  
  
internal class InvariantComparer : IComparer   
{  
    private CompareInfo m_compareInfo;  
    internal static readonly InvariantComparer Default = new  
        InvariantComparer();  
  
    internal InvariantComparer()   
    {  
        m_compareInfo = CultureInfo.InvariantCulture.CompareInfo;  
    }  
  
    public int Compare(Object a, Object b)  
    {  
        String sa = a as String;  
        String sb = b as String;  
        if (sa != null && sb != null)  
            return m_compareInfo.Compare(sa, sb);  
        else  
            return Comparer.Default.Compare(a,b);  
    }  
}  

Wenn Sie eine SortedList-Instanz für Zeichenfolgen verwenden, ohne eine benutzerdefinierte invariante Comparer-Klasse zu verwenden, gilt grundsätzlich, dass ein Ändern von Thread.CurrentCulture, nachdem die Liste aufgefüllt wurde, dazu führen kann, dass die Liste ungültig wird.In general, if you use a SortedList on strings without specifying a custom invariant comparer, a change to Thread.CurrentCulture after the list has been populated can invalidate the list.

Verwenden der ArrayList.Sort-MethodeUsing the ArrayList.Sort Method

Überladungen der ArrayList.Sort-Methode führen kulturabhängige Sortierungen standardmäßig mit der Thread.CurrentCulture-Eigenschaft aus.Overloads of the ArrayList.Sort method perform culture-sensitive sorts by default using the Thread.CurrentCulture property. Die Ergebnisse können je nach Kultur aufgrund der unterschiedlichen Sortierreihenfolgen variieren.Results can vary by culture due to different sort orders. Um kulturabhängiges Verhalten zu vermeiden, verwenden Sie die Überladung dieser Methode, die eine IComparer-Implementierung akzeptieren.To eliminate culture-sensitive behavior, use the overloads of this method that accept an IComparer implementation. Geben Sie für den comparer-Parameter eine benutzerdefinierte invariante Comparer-Klasse an, in der CultureInfo.InvariantCulture verwendet wird.For the comparer parameter, specify a custom invariant comparer class that uses CultureInfo.InvariantCulture. Ein Beispiel für eine benutzerdefinierte invariante Comparer-Klasse finden Sie im Thema Verwenden der SortedList-Klasse.An example of a custom invariant comparer class is provided in the Using the SortedList Class topic.

Siehe auchSee also