Partilhar via


Executar operações string diferenciação de cultura em coleções

Existem classes e membros no System.Collections espaço para nome que fornecer um comportamento sensíveis à cultura por padrão. Os construtores padrão para o CaseInsensitiveComparer e CaseInsensitiveHashCodeProvider classes de inicializar uma nova instância usando o Thread.CurrentCulture propriedade. Todas as sobrecargas do CollectionsUtil.CreateCaseInsensitiveHashTable método cria uma nova instância do Hashtable classe usando o Thread.CurrentCulture propriedade por padrão.Sobrecargas do ArrayList.Sort método executar classificações sensíveis à cultura usando padrão Thread.CurrentCulture.Classificação e pesquisa em um SortedList pode ser afetada por Thread.CurrentCulture quando sistema autônomo seqüências de caracteres são usadas sistema autônomo sistema autônomo chaves.Siga as recomendações de uso fornecidas nesta seção para obter resultados de diferenciação de cultura dessas classes e métodos no Coleções namespace.

Usando o CaseInsensitiveComparer e Classes CaseInsensitiveHashCodeProvider

Os construtores padrão de CaseInsensitiveHashCodeProvider and CaseInsensitiveComparer inicializar uma nova instância da classe usando o Thread.CurrentCulture, resultando em comportamento sensíveis à cultura.O exemplo de código a seguir demonstra o construtor para um Tabela de hash que é sensível à cultura porque ela usa os construtores padrão de CaseInsensitiveHashCodeProvider and CaseInsensitiveComparer.

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

Se você desejar criar uma diferenciação de cultura Tabela de hash usando o CaseInsensitiveComparer and CaseInsensitiveHashCodeProvider classes, inicializar novas instâncias dessas classes com construtores que aceitam um cultura parâmetro.O cultura parâmetro, especifique CultureInfo.InvariantCulture. O exemplo de código a seguir demonstra o construtor para uma diferenciação de cultura Tabela de hash.

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

Usando o método CollectionsUtil.CreateCaseInsensitiveHashTable

The CollectionsUtil.CreateCaseInsensitiveHashTable método é um atalho úteis para criar uma nova instância do Tabela de hash classe que ignora o caso de cadeias de caracteres.No entanto, todas as sobrecargas do CollectionsUtil.CreateCaseInsensitiveHashTable método são sensíveis à cultura porque eles usam o Thread.CurrentCulture propriedade .Não é possível criar uma diferenciação de cultura Tabela de hash usando esse método.Para criar uma diferenciação de cultura Tabela de hash, use the Tabela de hash construtor que aceita um cultura parâmetro.O cultura parâmetro, especifique CultureInfo.InvariantCulture.O exemplo de código a seguir demonstra o construtor para uma diferenciação de cultura Tabela de hash.

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

Usando a classe SortedList

A SortedList representa uma coleção de pares de chave e valor que são classificados por chaves e podem ser acessados por chave e por índice.Quando você usa um SortedList onde cadeias de caracteres são as chaves, a classificação e pesquisa pode ser afetada pelo Thread.CurrentCulturepropriedade .Para obter o comportamento de diferenciação de cultura de um SortedList, criar a SortedList usando um dos construtores que aceita um comparador parâmetro.The comparador parâmetro especifica o IComparer implementação a ser usado ao comparar as chaves. O IComparer parâmetro, especifique a classe uma comparador personalizado que usa CultureInfo.InvariantCulture para comparar as chaves.O exemplo a seguir ilustra uma classe de diferenciação de cultura de comparador personalizado que você pode especificar sistema autônomo a IComparer parâmetro um SortedList construtor.

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);
    }
}

Em geral, se você usar um SortedList em seqüências de caracteres sem especificar um comparador personalizado invariável, uma alterar de Thread.CurrentCulture depois que a lista foi preenchida pode invalidar a lista.

Usando o método ArrayList.classificar

Sobrecargas do ArrayList.classificar método executar classificações sensíveis à cultura por padrão, usando o Thread.CurrentCulturepropriedade .Os resultados podem variar por cultura devido a diferentes ordens de classificar.Para eliminar comportamento sensíveis à cultura, usar as sobrecargas desse método que aceitam um IComparer parâmetro.O IComparer parâmetro, especifique um comparador personalizado invariável de classe que usa CultureInfo.InvariantCulture.Fornece um exemplo de uma classe de comparador personalizado invariável no Usando a classe SortedList tópico.

Consulte também

Referência

CaseInsensitiveComparer

CaseInsensitiveHashCodeProvider

Método CollectionsUtil.CreateCaseInsensitiveHashTable

ArrayList.Sort

SortedList

Hashtable

IComparer

Outros recursos

Executando operações diferenciação de cultura de string