Apa bedanya dan kapan menggunakan apa? Apa risikonya jika saya selalu menggunakan ToLower()
dan apa risikonya jika saya selalu menggunakan ToLowerInvariant()
?
Apa bedanya dan kapan menggunakan apa? Apa risikonya jika saya selalu menggunakan ToLower()
dan apa risikonya jika saya selalu menggunakan ToLowerInvariant()
?
Jawaban:
Bergantung pada budaya saat ini, ToLower mungkin menghasilkan huruf kecil khusus budaya, yang tidak Anda harapkan. Seperti memproduksi ınfo
tanpa titik pada i dan bukannya info
dan dengan demikian mengumpulkan perbandingan string. Untuk alasan itu, ToLowerInvariant harus digunakan pada data khusus non-bahasa. Ketika Anda mungkin memiliki input pengguna yang mungkin dalam bahasa asli / karakter-set, umumnya akan menjadi satu-satunya saat Anda menggunakan ToLower.
Lihat pertanyaan ini untuk contoh masalah ini: C # - ToLower () terkadang menghapus titik dari huruf "I"
Saya pikir ini bisa bermanfaat:
http://msdn.microsoft.com/en-us/library/system.string.tolowerinvariant.aspx
memperbarui
Jika aplikasi Anda bergantung pada kasus string yang berubah dengan cara yang dapat diprediksi yang tidak terpengaruh oleh budaya saat ini, gunakan metode ToLowerInvariant. Metode ToLowerInvariant setara dengan ToLower (CultureInfo.InvariantCulture). Metode ini direkomendasikan ketika kumpulan string harus muncul dalam urutan yang dapat diprediksi dalam kontrol antarmuka pengguna.
juga
... ToLower sangat mirip di sebagian besar tempat dengan ToLowerInvariant. Dokumen-dokumen menunjukkan bahwa metode ini hanya akan mengubah perilaku dengan budaya Turki. Juga, pada sistem Windows, sistem file case-insensitive, yang selanjutnya membatasi penggunaannya ...
http://www.dotnetperls.com/tolowerinvariant-toupperinvariant
hth
String.ToLower()
menggunakan budaya default saat String.ToLowerInvariant()
menggunakan budaya invarian. Jadi Anda pada dasarnya menanyakan perbedaan antara budaya invarian dan perbandingan string ordinal .
ToLower
varian; Ordinal vs invariant hanya mengubah "urutan" dari dua string, tidak mengubah perbandingan kesetaraan.
TL; DR:
Ketika bekerja dengan "konten" (misalnya artikel, posting, komentar, nama, tempat, dll.) Gunakan ToLower()
. Saat bekerja dengan "literal" (mis. Argumen baris perintah, tata bahasa khusus, string yang seharusnya enum, dll.) GunakanToLowerInvariant()
.
Contoh:
= Menggunakan ToLowerInvariant
salah =
Di Turki, DIŞ
berarti "di luar" dan diş
berarti "gigi". Casing bawah yang tepat DIŞ
adalah dış
. Jadi, jika Anda menggunakan ToLowerInvariant
salah Anda mungkin memiliki kesalahan ketik di Turki.
= Menggunakan ToLower
salah =
Sekarang berpura-pura Anda sedang menulis parser SQL. Di suatu tempat Anda akan memiliki kode yang terlihat seperti:
if(operator.ToLower() == "like")
{
// Handle an SQL LIKE operator
}
Tata bahasa SQL tidak berubah ketika Anda mengubah budaya. Sebuah Prancis tidak menulis SÉLECTIONNEZ x DE books
bukan SELECT X FROM books
. Namun, agar kode di atas berfungsi, orang Turki harus menulis SELECT x FROM books WHERE Author LİKE '%Adams%'
(perhatikan titik di atas ibukota saya, hampir mustahil untuk dilihat). Ini akan membuat frustasi bagi pengguna Turki Anda.