Apa bedanya dan kapan menggunakan apa? Apa risikonya jika saya selalu menggunakan ToLower()dan apa risikonya jika saya selalu menggunakan ToLowerInvariant()?
Bergantung pada budaya saat ini, ToLower mungkin menghasilkan huruf kecil khusus budaya, yang tidak Anda harapkan. Seperti memproduksi ınfotanpa titik pada i dan bukannya infodan 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.
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 ...
Bukan dia. "Ordinal" adalah opsi ketiga - cara yang sedikit berbeda untuk "mengabaikan" budaya saat ini. Perbedaannya tidak relevan dalam membahas ToLowervarian; Ordinal vs invariant hanya mengubah "urutan" dari dua string, tidak mengubah perbandingan kesetaraan.
ToolmakerSteve
27
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 ToLowerInvariantsalah =
Di Turki, DIŞberarti "di luar" dan dişberarti "gigi". Casing bawah yang tepat DIŞadalah dış. Jadi, jika Anda menggunakan ToLowerInvariantsalah Anda mungkin memiliki kesalahan ketik di Turki.
= Menggunakan ToLowersalah =
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 booksbukan 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.
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 bukannyainfo
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"
sumber
Saya pikir ini bisa bermanfaat:
http://msdn.microsoft.com/en-us/library/system.string.tolowerinvariant.aspx
memperbarui
juga
http://www.dotnetperls.com/tolowerinvariant-toupperinvariant
hth
sumber
String.ToLower()
menggunakan budaya default saatString.ToLowerInvariant()
menggunakan budaya invarian. Jadi Anda pada dasarnya menanyakan perbedaan antara budaya invarian dan perbandingan string ordinal .sumber
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" dandiş
berarti "gigi". Casing bawah yang tepatDIŞ
adalahdış
. Jadi, jika Anda menggunakanToLowerInvariant
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:
Tata bahasa SQL tidak berubah ketika Anda mengubah budaya. Sebuah Prancis tidak menulis
SÉLECTIONNEZ x DE books
bukanSELECT X FROM books
. Namun, agar kode di atas berfungsi, orang Turki harus menulisSELECT 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.sumber