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.CurrentCulture
kü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.CurrentCulture
sı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 CaseInsensitiveComparer
iç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 Hashtable
bir 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 Hashtable
bir 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 Hashtable
bir 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 SortedList
kü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.