Esecuzione di operazioni sulle stringhe indipendenti dalle impostazioni cultura nelle raccoltePerforming Culture-Insensitive String Operations in Collections

Nello spazio dei nomi System.Collections sono disponibili classi e membri che per impostazione predefinita forniscono un comportamento dipendente dalle impostazioni cultura.There are classes and members in the System.Collections namespace that provide culture-sensitive behavior by default. I costruttori predefiniti per le classi CaseInsensitiveComparer e CaseInsensitiveHashCodeProvider inizializzano una nuova istanza tramite la proprietà Thread.CurrentCulture.The default constructors for the CaseInsensitiveComparer and CaseInsensitiveHashCodeProvider classes initialize a new instance using the Thread.CurrentCulture property. Per impostazione predefinita, tutti gli overload del metodo CollectionsUtil.CreateCaseInsensitiveHashtable creano una nuova istanza della classe Hashtable tramite la proprietà Thread.CurrentCulture.All overloads of the CollectionsUtil.CreateCaseInsensitiveHashtable method create a new instance of the Hashtable class using the Thread.CurrentCulture property by default. Per impostazione predefinita, gli overload del metodo ArrayList.Sort consentono di eseguire ordinamenti dipendenti dalle impostazioni cultura tramite Thread.CurrentCulture.Overloads of the ArrayList.Sort method perform culture-sensitive sorts by default using Thread.CurrentCulture. Ordinamento e ricerca in un SortedList possono essere influenzati dal Thread.CurrentCulture quando vengono usate stringhe come chiavi.Sorting and lookup in a SortedList can be affected by Thread.CurrentCulture when strings are used as the keys. Per ottenere risultati indipendenti dalle impostazioni cultura da queste classi e da questi metodi dello spazio dei nomi Collections, attenersi ai consigli sull'utilizzo forniti in questa sezione.Follow the usage recommendations provided in this section to obtain culture-insensitive results from these classes and methods in the Collections namespace.

Nota Il passaggio di CultureInfo.InvariantCulture a un metodo di confronto comporta l'esecuzione di un confronto non basato sulle impostazioni di cultura.Note Passing CultureInfo.InvariantCulture to a comparison method does perform a culture-insensitive comparison. Non viene tuttavia eseguito un confronto non linguistico, ad esempio per percorsi di file, chiavi del Registro di sistema e variabili di ambienteHowever, it does not cause a non-linguistic comparison, for example, for file paths, registry keys, and environment variables. e non sono supportate le decisioni relative alla sicurezza basate sul risultato del confronto.Neither does it support security decisions based on the comparison result. Per un confronto non linguistico o per il supporto delle decisioni relative alla sicurezza basate sul risultato, l'applicazione deve utilizzare un metodo di confronto che accetti un valore StringComparison.For a non-linguistic comparison or support for result-based security decisions, the application should use a comparison method that accepts a StringComparison value. L'applicazione deve quindi passare StringComparison.The application should then pass StringComparison.

Uso delle classi CaseInsensitiveComparer e CaseInsensitiveHashCodeProviderUsing the CaseInsensitiveComparer and CaseInsensitiveHashCodeProvider Classes

I costruttori predefiniti per CaseInsensitiveHashCodeProvider e CaseInsensitiveComparer consentono di inizializzare una nuova istanza della classe utilizzando Thread.CurrentCulture, determinando così un comportamento dipendente dalle impostazioni cultura.The default constructors for CaseInsensitiveHashCodeProvider and CaseInsensitiveComparer initialize a new instance of the class using the Thread.CurrentCulture, resulting in culture-sensitive behavior. Nell'esempio di codice seguente viene illustrato il costruttore per un oggetto Hashtable dipendente dalle impostazioni cultura in quanto utilizza i costruttori predefiniti per CaseInsensitiveHashCodeProvider e CaseInsensitiveComparer.The following code example demonstrates the constructor for a Hashtable that is culture-sensitive because it uses the default constructors for CaseInsensitiveHashCodeProvider and CaseInsensitiveComparer.

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

Per creare un oggetto Hashtable non basato sulle impostazioni di cultura usando le classi CaseInsensitiveComparer e CaseInsensitiveHashCodeProvider, inizializzare nuove istanze di queste classi utilizzando costruttori che accettano un parametro culture.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. Per il parametro culture specificare CultureInfo.InvariantCulture.For the culture parameter, specify CultureInfo.InvariantCulture. Nell'esempio di codice seguente viene illustrato il costruttore per un oggetto Hashtable indipendente dalle impostazioni cultura.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));  

Utilizzo del metodo CollectionsUtil.CreateCaseInsensitiveHashtableUsing the CollectionsUtil.CreateCaseInsensitiveHashTable Method

Il metodo CollectionsUtil.CreateCaseInsensitiveHashTable rappresenta un rapido meccanismo per creare una nuova istanza della classe Hashtable in cui viene ignorato l'uso di maiuscole e minuscole nelle stringhe.The CollectionsUtil.CreateCaseInsensitiveHashTable method is a useful shortcut for creating a new instance of the Hashtable class that ignores the case of strings. Tutti gli overload del metodo CollectionsUtil.CreateCaseInsensitiveHashTable sono tuttavia dipendenti dalle impostazioni cultura in quanto utilizzano la proprietà Thread.CurrentCulture.However, all overloads of the CollectionsUtil.CreateCaseInsensitiveHashTable method are culture-sensitive because they use the Thread.CurrentCulture property. Con questo metodo non è possibile creare un oggetto Hashtable indipendente dalle impostazioni cultura.You cannot create a culture-insensitive Hashtable using this method. Per creare un oggetto Hashtable indipendente dalle impostazioni cultura, usare il costruttore di Hashtableche accetta un parametro culture.To create a culture-insensitive Hashtable, use the Hashtable constructor that accepts a culture parameter. Per il parametro culture specificare CultureInfo.InvariantCulture.For the culture parameter, specify CultureInfo.InvariantCulture. Nell'esempio di codice seguente viene illustrato il costruttore per un oggetto Hashtable indipendente dalle impostazioni cultura.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));  

Utilizzo della classe SortedListUsing the SortedList Class

Un oggetto SortedList rappresenta una raccolta di coppie chiave-valore ordinate in base alle chiavi e a cui è possibile accedere in base alla chiave e all'indice.A SortedList represents a collection of key-and-value pairs that are sorted by the keys and are accessible by key and by index. Quando si utilizza un oggetto SortedList in cui le chiavi sono costituite da stringhe, è possibile che la proprietà Thread.CurrentCulture influisca sull'ordinamento e sulla ricerca.When you use a SortedList where strings are the keys, the sorting and lookup can be affected by the Thread.CurrentCulture property. Per ottenere un comportamento indipendente dalle impostazioni cultura da un oggetto SortedList, creare un oggetto SortedList con uno dei costruttori che accetta un parametro comparer.To obtain culture-insensitive behavior from a SortedList, create a SortedList using one of the constructors that accepts a comparer parameter. Il parametro comparer specifica l'implementazione di IComparer da usare quando si confrontano le chiavi.The comparer parameter specifies the IComparer implementation to use when comparing keys. Per il parametro, specificare una classe di operatori di confronto personalizzata che usi CultureInfo.InvariantCulture per il confronto delle chiavi.For the parameter, specify a custom comparer class that uses CultureInfo.InvariantCulture to compare keys. Nell'esempio seguente viene illustrata una classe personalizzata di operatori di confronto indipendenti dalle impostazioni cultura che è possibile specificare come parametro comparer per un costruttore di SortedList.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);  
    }  
}  

In generale, se si utilizza un oggetto SortedList nelle stringhe senza specificare un operatore di confronto invariabile personalizzato, è possibile che l'elenco venga invalidato da una modifica apportata a Thread.CurrentCulture dopo che vi sono state inserite voci.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.

Utilizzo del metodo ArrayList.SortUsing the ArrayList.Sort Method

Per impostazione predefinita, gli overload del metodo ArrayList.Sort consentono di eseguire ordinamenti dipendenti dalle impostazioni cultura tramite la proprietà Thread.CurrentCulture.Overloads of the ArrayList.Sort method perform culture-sensitive sorts by default using the Thread.CurrentCulture property. I risultati possono variare in base alle impostazioni cultura, a causa di diversi criteri di ordinamento.Results can vary by culture due to different sort orders. Per eliminare il comportamento dipendente dalle impostazioni cultura, utilizzare gli overload del metodo che accettano un'implementazione di IComparer.To eliminate culture-sensitive behavior, use the overloads of this method that accept an IComparer implementation. Per il parametro comparer, specificare una classe di operatori di confronto invariabili personalizzati che usi CultureInfo.InvariantCulture.For the comparer parameter, specify a custom invariant comparer class that uses CultureInfo.InvariantCulture. Per un esempio di classe di questo tipo, vedere l'argomento Utilizzo della classe SortedList.An example of a custom invariant comparer class is provided in the Using the SortedList Class topic.

Vedere ancheSee Also

CaseInsensitiveComparer
CaseInsensitiveHashCodeProvider
ArrayList.Sort
SortedList
Hashtable
IComparer
Esecuzione di operazioni sulle stringhe indipendenti dalle impostazioni culturaPerforming Culture-Insensitive String Operations
CollectionsUtil.CreateCaseInsensitiveHashtable