Bagaimana saya bisa membuat garis di bawah ini tidak sensitif huruf?
drUser["Enrolled"] =
(enrolledUsers.FindIndex(x => x.Username == (string)drUser["Username"]) != -1);
Saya diberi beberapa saran sebelumnya hari ini yang menyarankan agar saya menggunakan:
x.Username.Equals((string)drUser["Username"], StringComparison.OrdinalIgnoreCase)));
masalahnya adalah saya tidak bisa mendapatkan ini berfungsi, saya sudah mencoba baris di bawah ini, ini mengkompilasi tetapi mengembalikan hasil yang salah, mengembalikan pengguna terdaftar sebagai pengguna tidak terdaftar dan tidak terdaftar sebagai terdaftar.
drUser["Enrolled"] =
(enrolledUsers.FindIndex(x => x.Username.Equals((string)drUser["Username"],
StringComparison.OrdinalIgnoreCase)));
Adakah yang bisa menunjukkan masalahnya?
drUser["Enrolled"]
? Itu terlihat seperti nilai boolean, tetapiFindIndex()
mengembalikan indeks. Jika indeks pengguna itu adalah 0, maka itu akan mengembalikan 0, yang mungkin salah. Padahal, pada kenyataannya itu benar. TheExists()
Metode mungkin lebih baik dalam hal ini.Jawaban:
Ini bukan praktik terbaik dalam .NET framework (4 & +) untuk memeriksa kesetaraan
Gunakan yang berikut ini sebagai gantinya
MSDN merekomendasikan:
sumber
string.Compare
, bukanString.Compare
.string
adalah praktik yang lebih baik daripadaString
karena merupakan kata kunci bahasa. Untuk satu,String
bisa menjadi sesuatu selainSystem.String
, sedangkanstring
tidak bisa. Juga,string
lebih atau kurang dijamin ada di C #, sedangkanString
secara teknis bagian dari .NET daripada C #.Anda harus menggunakan
String.Compare
fungsi statis seperti berikutsumber
String.Equals
bukanString.Compare
. Tidak perlu menghitung mana yang lebih besar, hanya saja mereka tidak sama.IEquatable
danIComparable
JANGAN melakukan hal yang sama, dan Anda dapat memiliki kelas yang mengimplementasikan satu tetapi di mana itu TIDAK masuk akal untuk mengimplementasikan yang lain. Misalnya, Anda dapat memesan sampel sensor berdasarkan waktu tanpa ada yang sama (IComparable). Dan, Anda dapat menunjukkan apakah semuanya sama (IEquatable) tetapi tidak masuk akal untuk memesannya (misalnya, nomor seri komputer).Silakan gunakan ini untuk perbandingan:
sumber
Jawaban yang lain benar-benar valid di sini, tetapi entah bagaimana butuh waktu untuk mengetik
StringComparison.OrdinalIgnoreCase
dan juga menggunakanString.Compare
.Saya telah mengkodekan metode ekstensi String sederhana, di mana Anda dapat menentukan apakah perbandingan case-sensitive atau case-sensitive dengan boolean, melampirkan seluruh potongan kode di sini:
Setelah itu seluruh perbandingan lebih pendek sekitar 10 karakter - bandingkan:
Sebelum menggunakan ekstensi String:
Setelah menggunakan ekstensi String:
sumber
Anda dapat (meskipun bertentangan) memperluas
System.String
untuk memberikan metode ekstensi perbandingan case-insensitive:dan gunakan seperti itu:
C # memungkinkan Anda untuk membuat metode ekstensi yang dapat berfungsi sebagai suggar sintaks dalam proyek Anda, cukup berguna saya katakan.
Ini bukan jawabannya dan saya tahu pertanyaan ini sudah lama dan terpecahkan, saya hanya ingin menambahkan bit-bit ini.
sumber
Saya pikir Anda akan menemukan informasi lebih lanjut di tautan ini:
http://codeidol.com/community/dotnet/controlling-case-sensitivity-when-comparing-two-st/8873/
Gunakan metode Bandingkan statis pada kelas String untuk membandingkan dua string. Apakah perbandingannya case-insensitive ditentukan oleh parameter ketiga dari salah satu kelebihannya. Sebagai contoh:
Nilai caseSensitiveResult adalah -1 (menunjukkan bahwa huruf kecil adalah "kurang dari" huruf besar) dan caseInsensitiveResult adalah nol (menunjukkan bahwa huruf kecil "sama dengan" huruf besar).
sumber
Bagaimana kalau menggunakan
StringComparison.CurrentCultureIgnoreCase
saja?sumber
Saya ingin menulis metode ekstensi untuk EqualsIgnoreCase
sumber
Anda selalu dapat menggunakan fungsi: .ToLower (); .ToUpper ();
konversikan string Anda dan kemudian membandingkannya ...
Semoga berhasil
sumber