Exécution d'opérations de chaînes indépendantes de la culture dans des collections
L'espace de noms System.Collections contient des classes et des membres qui génèrent un comportement dépendant de la culture par défaut. Les constructeurs par défaut des classes CaseInsensitiveComparer et CaseInsensitiveHashCodeProvider initialisent une nouvelle instance à l'aide de la propriété Thread.CurrentCulture. Toutes les surcharges de la méthode CollectionsUtil.CreateCaseInsensitiveHashTable créent une nouvelle instance de la classe Hashtable à l'aide de la propriété Thread.CurrentCulture par défaut. Les surcharges de la méthode ArrayList.Sort effectuent des tris dépendants de la culture par défaut à l'aide de Thread.CurrentCulture. Le tri et la consultation dans un SortedList peuvent être affectés par le Thread.CurrentCulture lorsque les chaînes sont utilisées comme clés. Suivez les recommandations d'utilisation contenues dans cette section pour obtenir des résultats indépendants de la culture de la part de ces classes et de ces méthodes de l'espace de noms Collections.
Utilisation des classes CaseInsensitiveComparer et CaseInsensitiveHashCodeProvider
Les constructeurs par défaut de CaseInsensitiveHashCodeProvider et CaseInsensitiveComparer initialisent une nouvelle instance de la classe à l'aide de Thread.CurrentCulture, ce qui permet d'obtenir un comportement dépendant de la culture. L'exemple de code suivant illustre le constructeur de Hashtable qui est dépendant de la culture, car il utilise les constructeurs par défaut de CaseInsensitiveHashCodeProvider et CaseInsensitiveComparer.
internalHashtable = New Hashtable(CaseInsensitiveHashCodeProvider.Default, CaseInsensitiveComparer.Default)
internalHashtable = new Hashtable(CaseInsensitiveHashCodeProvider.Default, CaseInsensitiveComparer.Default);
Si vous souhaitez créer un Hashtable indépendant de la culture à l'aide des classes CaseInsensitiveComparer et CaseInsensitiveHashCodeProvider, initialisez des nouvelles instances de ces classes à l'aide de constructeurs qui acceptent un paramètre culture. Pour le paramètre culture, spécifiez CultureInfo.InvariantCulture. L'exemple de code suivant illustre le constructeur d'un Hashtable indépendant de la culture.
internalHashtable = New Hashtable(New
CaseInsensitiveHashCodeProvider(CultureInfo.InvariantCulture),
New CaseInsensitiveComparer(CultureInfo.InvariantCulture))
internalHashtable = new Hashtable(new CaseInsensitiveHashCodeProvider
(CultureInfo.InvariantCulture),
new CaseInsensitiveComparer(CultureInfo.InvariantCulture));
Utilisation de la méthode CollectionsUtil.CreateCaseInsensitiveHashTable
La méthode CollectionsUtil.CreateCaseInsensitiveHashTable est un raccourci utile pour créer une nouvelle instance de la classe Hashtable qui ignore la casse des chaînes. Toutefois, toutes les surcharges de la méthode CollectionsUtil.CreateCaseInsensitiveHashTable sont dépendantes de la culture, car elles utilisent la propriété Thread.CurrentCulture. Vous ne pouvez pas créer de Hashtable indépendant de la culture à l'aide de cette méthode. Pour créer un Hashtable indépendant de la culture, utilisez le constructeur Hashtable qui accepte un paramètre culture. Pour le paramètre culture, spécifiez CultureInfo.InvariantCulture. L'exemple de code suivant illustre le constructeur d'un Hashtable indépendant de la culture.
internalHashtable = New Hashtable(New
CaseInsensitiveHashCodeProvider(CultureInfo.InvariantCulture),
New CaseInsensitiveComparer(CultureInfo.InvariantCulture))
internalHashtable = new Hashtable(new CaseInsensitiveHashCodeProvider
(CultureInfo.InvariantCulture),
new CaseInsensitiveComparer(CultureInfo.InvariantCulture));
Utilisation de la classe SortedList
SortedList représente une collection de paires valeur-clé triées par les clés et accessible par clé et par index. Lorsque vous utilisez un SortedList où des chaînes sont les clés, le tri et la recherche peuvent être affectés par la propriété Thread.CurrentCulture. Pour que le comportement de SortedList soit indépendant de la culture, créez SortedList en utilisant l'un des constructeurs acceptant un paramètre comparer. Le paramètre comparer indique à IComparer l'implémentation à utiliser lors de la comparaison de clés. Pour le paramètre IComparer, spécifiez une classe de comparateur personnalisé qui utilise CultureInfo.InvariantCulture pour comparer des clés. L'exemple suivant illustre une classe de comparateur personnalisé indépendant de la culture que vous pouvez spécifier comme paramètre IComparer pour un constructeur de SortedList.
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);
}
}
En général, si vous utilisez SortedList sur des chaînes sans spécifier de comparateur personnalisé indifférent, un changement dans Thread.CurrentCulture une fois la liste remplie peut invalider cette liste.
Utilisation de la méthode ArrayList.Sort
Les surcharges de la méthode ArrayList.Sort effectuent des tris dépendants de la culture par défaut à l'aide de la propriété Thread.CurrentCulture. Les résultats peuvent varier selon la culture, en raison des différents ordres de tri. Pour supprimer cette dépendance à la culture, utilisez les surcharges de cette méthode acceptant un paramètre IComparer. Pour le paramètre IComparer, spécifiez une classe de comparateur personnalisé indifférent qui utilise CultureInfo.InvariantCulture. La rubrique Utilisation de la classe SortedList contient un exemple de classe de comparateur indifférent personnalisé.
Voir aussi
Référence
CaseInsensitiveComparer Class
CaseInsensitiveHashCodeProvider Class
CollectionsUtil.CreateCaseInsensitiveHashTable Method
ArrayList.Sort Method
SortedList Class
Hashtable Class
IComparer Interface
Autres ressources
Exécution d'opérations de chaînes indépendantes de la culture