Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Es gibt Klassen und Member im System.Collections Namespace, die standardmäßig kultursensitives Verhalten bereitstellen. Die parameterlosen Konstruktoren für die CaseInsensitiveComparer und CaseInsensitiveHashCodeProvider Klassen initialisieren eine neue Instanz mithilfe der Thread.CurrentCulture Eigenschaft. Alle Überladungen der CollectionsUtil.CreateCaseInsensitiveHashtable Methode erstellen standardmäßig eine neue Instanz der Hashtable Klasse mit der Thread.CurrentCulture
Eigenschaft. Überladungen der ArrayList.Sort-Methode führen mithilfe von Thread.CurrentCulture
standardmäßig kultursensitive Sortierungen durch. Das Sortieren und Nachschlagen in einer SortedList kann durch Thread.CurrentCulture
beeinflusst werden; wenn Zeichenfolgen als Schlüssel verwendet werden. Befolgen Sie die in diesem Abschnitt angegebenen Verwendungsempfehlungen, um kulturunempfindliche Ergebnisse aus diesen Klassen und Methoden im Collections
Namespace zu erhalten.
Hinweis
Das Übergeben CultureInfo.InvariantCulture an eine Vergleichsmethode führt einen Kultur-insensitiven Vergleich durch. Es verursacht jedoch keinen nicht sprachlichen Vergleich, z. B. für Dateipfade, Registrierungsschlüssel und Umgebungsvariablen. Es unterstützt auch keine Sicherheitsentscheidungen, die auf dem Vergleichsergebnis basieren. Für einen nicht sprachlichen Vergleich oder eine Unterstützung für ergebnisbasierte Sicherheitsentscheidungen sollte die Anwendung eine Vergleichsmethode verwenden, die einen StringComparison Wert akzeptiert. Die Anwendung sollte dann StringComparison übergeben.
Verwenden Sie die Klassen CaseInsensitiveComparer
und CaseInsensitiveHashCodeProvider
Die parameterlosen Konstruktoren für CaseInsensitiveHashCodeProvider
und CaseInsensitiveComparer
initialisieren eine neue Instanz der Klasse unter Verwendung des Thread.CurrentCulture
und führen zu kultursensitivem Verhalten. Im folgenden Codebeispiel wird ein kultursensibler Konstruktor für Hashtable
dargestellt, da er die parameterlosen Konstruktoren für CaseInsensitiveHashCodeProvider
und CaseInsensitiveComparer
verwendet.
internalHashtable = New Hashtable(CaseInsensitiveHashCodeProvider.Default, CaseInsensitiveComparer.Default)
internalHashtable = new Hashtable(CaseInsensitiveHashCodeProvider.Default, CaseInsensitiveComparer.Default);
Wenn Sie eine kulturunempfindliche Hashtable
mithilfe der Klassen CaseInsensitiveComparer
und CaseInsensitiveHashCodeProvider
erstellen möchten, initialisieren Sie neue Instanzen dieser Klassen mit den Konstruktoren, die einen culture
-Parameter akzeptieren. Für den culture
Parameter, definieren Sie CultureInfo.InvariantCulture. Im folgenden Codebeispiel wird der Konstruktor für eine kulturunabhängige Hashtable
-Instanz veranschaulicht.
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
Methode
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. Allerdings sind alle Überladungen der CollectionsUtil.CreateCaseInsensitiveHashTable
Methode kulturempfindlich, da sie die Thread.CurrentCulture
Eigenschaft verwenden. Sie können mit dieser Methode kein kulturunempfindliches Hashtable
erstellen. Um eine kulturunempfindliche Hashtable
zu erstellen, verwenden Sie den Hashtable
-Konstruktor, der einen culture
-Parameter akzeptiert. Für den culture
Parameter, definieren Sie CultureInfo.InvariantCulture
. Im folgenden Codebeispiel wird der Konstruktor für eine kulturunabhängige Hashtable
-Instanz veranschaulicht.
internalHashtable = New Hashtable(New
CaseInsensitiveHashCodeProvider(CultureInfo.InvariantCulture),
New CaseInsensitiveComparer(CultureInfo.InvariantCulture))
internalHashtable = new Hashtable(new CaseInsensitiveHashCodeProvider
(CultureInfo.InvariantCulture),
new CaseInsensitiveComparer(CultureInfo.InvariantCulture));
Verwenden Sie die SortedList
-Klasse
A SortedList
stellt eine Auflistung von Schlüssel- und Wertpaaren dar, die nach den Schlüsseln sortiert sind und nach Schlüsseln und nach Index zugänglich sind. Wenn Sie eine SortedList
Stelle verwenden, an der Zeichenfolgen die Schlüssel sind, kann die Sortierung und suche von der Thread.CurrentCulture
Eigenschaft beeinflusst werden. Um ein kulturunabhängiges Verhalten von einem SortedList
zu erzielen, erstellen Sie ein SortedList
mithilfe eines der Konstruktoren, die einen comparer
Parameter akzeptieren. Der comparer
Parameter gibt die Implementierung IComparer vor, die beim Vergleichen von Schlüsseln verwendet werden soll. Geben Sie für den Parameter eine benutzerdefinierte Vergleichsklasse an, die zum Vergleichen von Schlüsseln verwendet wird CultureInfo.InvariantCulture
. Das folgende Beispiel veranschaulicht eine benutzerdefinierte kulturunabhängige Vergleichsklasse, die Sie als comparer
Parameter für einen SortedList
Konstruktor angeben können.
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 _compareInfo;
internal static readonly InvariantComparer Default = new
InvariantComparer();
internal InvariantComparer()
{
_compareInfo = CultureInfo.InvariantCulture.CompareInfo;
}
public int Compare(Object a, Object b)
{
if (a is string sa && b is string sb)
return _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.
Verwenden der ArrayList.Sort
Methode
Überladungen der ArrayList.Sort
Methode führen kultursensitive Sortierungen standardmäßig mithilfe der Thread.CurrentCulture
Eigenschaft aus. Die Ergebnisse können aufgrund unterschiedlicher Sortierreihenfolgen je nach Kultur variieren. Um kulturabhängiges Verhalten zu vermeiden, verwenden Sie die Überladung dieser Methode, die eine IComparer
-Implementierung akzeptieren. Geben Sie für den comparer
Parameter eine benutzerdefinierte invariante Vergleichsklasse an, die CultureInfo.InvariantCulture
verwendet. Ein Beispiel für eine benutzerdefinierte invariante Vergleichsklasse wird im Thema "Using the SortedList Class " bereitgestellt.