Saya punya beberapa kode seperti ini:
If key.Equals("search", StringComparison.OrdinalIgnoreCase) Then
DoSomething()
End If
Saya tidak peduli dengan kasus ini. Apakah saya harus menggunakan OrdinalIgnoreCase
, InvariantCultureIgnoreCase
atau CurrentCultureIgnoreCase
?
.net
vb.net
localization
Dave Haynes
sumber
sumber
Jawaban:
Dokumen .Net yang lebih baru sekarang memiliki tabel untuk membantu Anda memutuskan mana yang terbaik untuk digunakan dalam situasi Anda.
Dari " Rekomendasi Baru MSDN untuk Menggunakan String di Microsoft .NET 2.0 "
sumber
"Straße"
dan"STRASSE"
. Bila menggunakanOrdinalIgnoreCase
yangEquals
kembalifalse
, sedangkanInvariantCultureIgnoreCase
mengatakan mereka sama.Semuanya tergantung
Membandingkan string unicode sulit:
lihat: http://en.wikipedia.org/wiki/Unicode_equivalence
Jika Anda mencoba membandingkan 2 string unicode dengan case case insensitive dan ingin itu bekerja di MANA SAJA , Anda memiliki masalah yang mustahil.
Contoh klasiknya adalah bahasa Turki i , yang ketika huruf besar menjadi İ (perhatikan titik)
Secara default, framework .Net biasanya menggunakan CurrentCulture untuk fungsi terkait string, dengan pengecualian yang sangat penting
.Equals
yang menggunakan perbandingan ordinal (byte by byte).Ini mengarah, dengan desain, ke berbagai fungsi string berperilaku berbeda tergantung pada budaya komputer.
Meskipun demikian, kadang-kadang kita menginginkan "tujuan umum", case-sensitive, perbandingan.
Misalnya, Anda mungkin ingin perbandingan string Anda berperilaku dengan cara yang sama, apa pun komputer tempat aplikasi Anda diinstal.
Untuk mencapai ini kami memiliki 3 opsi:
Aturan kesetaraan Unicode rumit, yang berarti menggunakan metode 1) atau 2) lebih mahal daripada
OrdinalIgnoreCase
. Fakta yangOrdinalIgnoreCase
tidak melakukan normalisasi unicode khusus, berarti bahwa beberapa string yang merender dengan cara yang sama di layar komputer, tidak akan dianggap identik. Misalnya:"\u0061\u030a"
dan"\u00e5"
keduanya membuat å. Namun dalam perbandingan ordinal akan dianggap berbeda.Yang Anda pilih sangat tergantung pada aplikasi yang Anda buat.
Microsoft memiliki serangkaian rekomendasi mereka dengan pedoman eksplisit. Namun, sangat penting untuk memahami gagasan kesetaraan unicode sebelum mendekati masalah ini.
Juga, harap diingat bahwa OrdinalIgnoreCase adalah jenis binatang yang sangat istimewa , yaitu mengambil dan memilih sedikit ordinal dibandingkan dengan beberapa campuran dalam aspek leksikografis. Ini bisa membingungkan.
sumber
Saya kira itu tergantung pada situasi Anda. Karena perbandingan ordinal sebenarnya melihat nilai Unicode numerik karakter, mereka tidak akan menjadi pilihan terbaik saat Anda mengurutkan berdasarkan abjad. Untuk perbandingan string, meskipun, ordinal akan sedikit lebih cepat.
sumber
Itu tergantung pada apa yang Anda inginkan, meskipun saya akan menghindar dari kultur invariant kecuali Anda sangat yakin Anda tidak akan pernah ingin melokalisasi kode untuk bahasa lain. Gunakan CurrentCulture sebagai gantinya.
Juga, OrdinalIgnoreCase harus menghormati angka, yang mungkin atau mungkin tidak seperti yang Anda inginkan.
sumber
Jawaban yang sangat sederhana adalah, kecuali Anda menggunakan bahasa Turki, Anda tidak perlu menggunakan InvariantCulture.
Lihat tautan berikut:
Dalam C # apa perbedaan antara ToUpper () dan ToUpperInvariant ()?
sumber