Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Ada kelas dan anggota di namespace System.Collections yang menyediakan perilaku yang peka terhadap budaya secara default. Konstruktor tanpa parameter untuk CaseInsensitiveComparer kelas dan CaseInsensitiveHashCodeProvider menginisialisasi instans baru menggunakan Thread.CurrentCulture properti . Semua overload dari metode CollectionsUtil.CreateCaseInsensitiveHashtable membuat instans baru dari kelas Hashtable menggunakan properti Thread.CurrentCulture secara default. Kelebihan beban ArrayList.Sort metode melakukan pengurutan sensitif budaya secara default menggunakan Thread.CurrentCulture. Pengurutan dan pencarian dalam SortedList dapat dipengaruhi oleh Thread.CurrentCulture ketika string digunakan sebagai kunci. Ikuti rekomendasi penggunaan yang disediakan di bagian ini untuk mendapatkan hasil yang mengabaikan aspek budaya dari kelas dan metode ini dalam namespace Collections.
Nota
Meneruskan CultureInfo.InvariantCulture ke metode perbandingan memang melakukan perbandingan yang tidak peka budaya. Namun, itu tidak menyebabkan perbandingan non-linguistik, misalnya, untuk jalur file, kunci registri, dan variabel lingkungan. Juga tidak mendukung keputusan keamanan berdasarkan hasil perbandingan. Untuk perbandingan atau dukungan yang tidak melibatkan bahasa untuk keputusan keamanan berbasis hasil, aplikasi harus menggunakan metode perbandingan yang menerima nilai StringComparison. Aplikasi kemudian harus lulus StringComparison.
Gunakan kelas CaseInsensitiveComparer dan CaseInsensitiveHashCodeProvider
Konstruktor tanpa parameter untuk CaseInsensitiveHashCodeProvider dan CaseInsensitiveComparer menginisialisasi instans baru kelas menggunakan Thread.CurrentCulture, menghasilkan perilaku sensitif terhadap budaya. Contoh kode berikut menunjukkan konstruktor untuk Hashtable yang sensitif terhadap budaya karena menggunakan konstruktor tanpa parameter untuk CaseInsensitiveHashCodeProvider dan CaseInsensitiveComparer.
internalHashtable = New Hashtable(CaseInsensitiveHashCodeProvider.Default, CaseInsensitiveComparer.Default)
internalHashtable = new Hashtable(CaseInsensitiveHashCodeProvider.Default, CaseInsensitiveComparer.Default);
Jika Anda ingin membuat Hashtable yang tidak peka budaya dengan menggunakan kelas CaseInsensitiveComparer dan CaseInsensitiveHashCodeProvider, inisialisasi instans baru dari kelas-kelas ini menggunakan konstruktor yang menerima parameter culture. Untuk parameter culture, tentukan CultureInfo.InvariantCulture. Contoh kode berikut menunjukkan konstruktor untuk budaya yang tidak sensitif Hashtable.
internalHashtable = New Hashtable(New
CaseInsensitiveHashCodeProvider(CultureInfo.InvariantCulture),
New CaseInsensitiveComparer(CultureInfo.InvariantCulture))
internalHashtable = new Hashtable(new CaseInsensitiveHashCodeProvider
(CultureInfo.InvariantCulture),
new CaseInsensitiveComparer(CultureInfo.InvariantCulture));
Gunakan metode CollectionsUtil.CreateCaseInsensitiveHashTable
Metode CollectionsUtil.CreateCaseInsensitiveHashTable ini adalah pintasan yang berguna untuk membuat instans Hashtable baru kelas yang mengabaikan kasus string. Namun, semua overload CollectionsUtil.CreateCaseInsensitiveHashTable dari metode ini sensitif terhadap budaya karena menggunakan properti Thread.CurrentCulture. Anda tidak dapat membuat Hashtable yang tidak sensitif budaya menggunakan metode ini. Untuk membuat Hashtable yang tidak peka budaya, gunakan konstruktor Hashtable yang menerima parameter culture. Untuk parameter culture, tentukan CultureInfo.InvariantCulture. Contoh kode berikut menunjukkan konstruktor untuk budaya yang tidak sensitif Hashtable.
internalHashtable = New Hashtable(New
CaseInsensitiveHashCodeProvider(CultureInfo.InvariantCulture),
New CaseInsensitiveComparer(CultureInfo.InvariantCulture))
internalHashtable = new Hashtable(new CaseInsensitiveHashCodeProvider
(CultureInfo.InvariantCulture),
new CaseInsensitiveComparer(CultureInfo.InvariantCulture));
Menggunakan kelas SortedList
mewakili SortedList kumpulan pasangan kunci dan nilai yang diurutkan berdasarkan kunci dan dapat diakses melalui kunci atau indeks. Saat Anda menggunakan SortedList di mana string adalah kunci, pengurutan dan pencarian dapat dipengaruhi oleh Thread.CurrentCulture properti . Untuk mendapatkan perilaku tidak sensitif budaya dari SortedList, buat SortedList menggunakan salah satu konstruktor yang menerima comparer parameter. Parameter comparer menentukan implementasi yang IComparer akan digunakan saat membandingkan kunci. Untuk parameter , tentukan kelas pembanding kustom yang menggunakan CultureInfo.InvariantCulture untuk membandingkan kunci. Contoh berikut mengilustrasikan kelas pembanding khusus yang tidak peka terhadap budaya yang dapat Anda tentukan sebagai parameter comparer ke konstruktor SortedList.
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);
}
}
Secara umum, jika Anda menggunakan SortedList pada string tanpa menentukan perbandingan invarian kustom, perubahan Thread.CurrentCulture ke setelah daftar diisi dapat membatalkan daftar.
Gunakan metode ArrayList.Sort
Kelebihan beban ArrayList.Sort metode melakukan pengurutan sensitif budaya secara default menggunakan Thread.CurrentCulture properti . Hasil dapat bervariasi menurut budaya karena urutan pengurutan yang berbeda. Untuk menghilangkan perilaku sensitif budaya, gunakan kelebihan beban metode ini yang menerima IComparer implementasi.
comparer Untuk parameter , tentukan kelas pembanding invarian kustom yang menggunakan CultureInfo.InvariantCulture. Contoh kelas pembanding invarian kustom disediakan dalam topik Menggunakan Kelas DaftarUrut .