Aracılığıyla paylaş


Koleksiyonlarda kültüre duyarsız dize işlemleri gerçekleştirme

Ad alanında varsayılan olarak kültüre System.Collections duyarlı davranış sağlayan sınıflar ve üyeler vardır. ve CaseInsensitiveHashCodeProvider sınıfları için CaseInsensitiveComparer parametresiz oluşturucular özelliğini kullanarak Thread.CurrentCulture yeni bir örnek başlatır. yönteminin CollectionsUtil.CreateCaseInsensitiveHashtable tüm aşırı yüklemeleri, varsayılan olarak özelliğini kullanarak sınıfının yeni bir örneğini HashtableThread.CurrentCulture oluşturur. yönteminin ArrayList.Sort aşırı yüklemeleri, kullanarak Thread.CurrentCulturekültüre duyarlı sıralamaları varsayılan olarak gerçekleştirir. içinde sıralama ve arama SortedList , dizelerin anahtar olarak kullanılmasından etkilenebilir Thread.CurrentCulture . Ad alanında bu sınıflardan ve yöntemlerden kültüre duyarsız sonuçlar elde etmek için bu bölümde sağlanan kullanım önerilerini Collections izleyin.

Not

CultureInfo.InvariantCulture Karşılaştırma yöntemine geçiş, kültüre duyarsız bir karşılaştırma gerçekleştirir. Ancak, dosya yolları, kayıt defteri anahtarları ve ortam değişkenleri gibi dilsel olmayan bir karşılaştırmaya neden olmaz. Karşılaştırma sonucuna göre güvenlik kararlarını da desteklemez. Dilsel olmayan bir karşılaştırma veya sonuç tabanlı güvenlik kararları için destek için, uygulama bir StringComparison değeri kabul eden bir karşılaştırma yöntemi kullanmalıdır. Uygulama daha sonra geçirmelidir StringComparison.

ve CaseInsensitiveHashCodeProvider sınıflarını CaseInsensitiveComparer kullanma

için CaseInsensitiveHashCodeProvider parametresiz oluşturucular ve kullanarak Thread.CurrentCulturesınıfının yeni bir örneğini başlatır ve CaseInsensitiveComparer kültüre duyarlı davranışla sonuçlanır. Aşağıdaki kod örneği, ve CaseInsensitiveCompareriçin CaseInsensitiveHashCodeProvider parametresiz oluşturucuları kullandığından kültüre duyarlı bir Hashtable oluşturucuyu gösterir.

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

ve CaseInsensitiveHashCodeProvider sınıflarını kullanarak CaseInsensitiveComparer kültüre duyarsız Hashtable bir oluşturmak istiyorsanız, parametre kabul culture eden oluşturucuları kullanarak bu sınıfların yeni örneklerini başlatın. parametresi için culture belirtin CultureInfo.InvariantCulture. Aşağıdaki kod örneği, kültüre duyarsız Hashtablebir için oluşturucuyu gösterir.

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

CollectionsUtil.CreateCaseInsensitiveHashTable yöntemini kullanma

CollectionsUtil.CreateCaseInsensitiveHashTable yöntemi, dizelerin büyük/küçük harf durumunu yoksayan sınıfının yeni bir örneğini Hashtable oluşturmak için kullanışlı bir kısayoldur. Ancak, özelliğini kullandıklarından yöntemin CollectionsUtil.CreateCaseInsensitiveHashTable tüm aşırı yüklemeleri kültüre Thread.CurrentCulture duyarlıdır. Bu yöntemi kullanarak kültüre duyarsız Hashtable oluşturamazsınız. Kültüre duyarsız Hashtablebir oluşturmak için parametre kabul culture eden oluşturucuyu Hashtable kullanın. parametresi için culture belirtin CultureInfo.InvariantCulture. Aşağıdaki kod örneği, kültüre duyarsız Hashtablebir için oluşturucuyu gösterir.

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

sınıfını SortedList kullanma

A SortedList , anahtarlara göre sıralanmış ve anahtara ve dizine göre erişilebilen anahtar ve değer çiftlerinden oluşan bir koleksiyonu temsil eder. Dizelerin anahtar olduğu bir SortedList kullandığınızda, sıralama ve arama özelliğinden Thread.CurrentCulture etkilenebilir. 'den SortedListkültüre duyarsız davranış elde etmek için parametresini SortedList kabul eden oluşturuculardan birini kullanarak bir comparer oluşturun. comparer parametresi, IComparer anahtarları karşılaştırırken kullanılacak uygulamayı belirtir. parametresi için anahtarları karşılaştırmak için kullanan CultureInfo.InvariantCulture özel bir karşılaştırıcı sınıfı belirtin. Aşağıdaki örnekte, bir oluşturucunun parametresi olarak comparer belirtebileceğiniz özel kültüre duyarsız bir SortedList karşılaştırıcı sınıfı gösterilmektedir.

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

Genel olarak, özel sabit karşılaştırıcı belirtmeden dizelerde kullanırsanız SortedList , liste doldurulduktan sonra olarak yapılan bir değişiklik Thread.CurrentCulture listeyi geçersiz kılabilir.

ArrayList.Sort yöntemini kullanma

yönteminin ArrayList.Sort aşırı yüklemeleri, özelliğini kullanarak Thread.CurrentCulture kültüre duyarlı sıralamaları varsayılan olarak gerçekleştirir. Sonuçlar, farklı sıralama düzenleri nedeniyle kültüre göre farklılık gösterebilir. Kültüre duyarlı davranışı ortadan kaldırmak için bu yöntemin bir IComparer uygulamayı kabul eden aşırı yüklemelerini kullanın. parametresi için comparer kullanan CultureInfo.InvariantCultureözel bir sabit karşılaştırıcı sınıfı belirtin. SortedList Sınıfını Kullanma konusunda özel sabit karşılaştırıcı sınıfına bir örnek verilmiştir.

Ayrıca bkz.