Menyelesaikan Masalah Perbandingan Rentetan Kes-Tidak Peka dalam C#
Satu perangkap biasa dalam pembangunan C# melibatkan pelaksanaan perbandingan rentetan tidak sensitif huruf besar-besaran. Walaupun x.Username.Equals()
mungkin kelihatan sesuai, ia boleh membawa kepada hasil yang tidak dijangka jika sensitiviti kes tidak dikendalikan secara eksplisit.
Pendekatan awal, x.Username.Equals((string)drUser["Username"], StringComparison.OrdinalIgnoreCase))
, walaupun kelihatan betul, mungkin tidak selalu berfungsi seperti yang diharapkan dalam konteks yang lebih besar.
Isu timbul apabila menggunakan Equals
dalam ungkapan LINQ, seperti FindIndex
. Masalahnya terletak pada pengendalian tersirat kaedah bagi nilai nol.
Pendekatan yang Betul
Penyelesaian adalah dengan menggunakan String.Equals
secara langsung, memastikan pengendalian nol yang betul dan perbandingan tidak sensitif huruf besar/kecil:
drUser["Enrolled"] = (enrolledUsers.FindIndex(x => String.Equals(x.Username, (string)drUser["Username"], StringComparison.OrdinalIgnoreCase)));
Kod yang disemak ini secara eksplisit memanggil kaedah String.Equals
statik, yang mengendalikan potensi nilai nol dengan betul daripada sama ada x.Username
atau (string)drUser["Username"]
.
Amalan Terbaik Disyorkan
Untuk manipulasi rentetan yang mantap dan cekap:
String.Equals
lebihan beban untuk semakan kesaksamaan, nyatakan StringComparison.OrdinalIgnoreCase
untuk perbandingan tidak peka huruf besar-kecil.String.Compare
atau String.CompareTo
untuk operasi pengisihan rentetan. Kaedah ini memberikan lebih kawalan dan kecekapan untuk menyusun tugas.Contoh Pelaksanaan
Coretan kod berikut menggambarkan amalan terbaik yang disyorkan:
drUser["Enrolled"] = enrolledUsers.FindIndex(x => String.Equals(x.Username, (string)drUser["Username"], StringComparison.OrdinalIgnoreCase));
Dengan mengikuti garis panduan ini, pembangun boleh mengelakkan perangkap biasa dan memastikan perbandingan rentetan tidak sensitif huruf besar dan kecil yang cekap dalam aplikasi C# mereka.
Atas ialah kandungan terperinci Mengapa Perbandingan Rentetan Tidak Peka Huruf Gagal dalam C# Menggunakan `x.Username.Equals()`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!