Jika saya punya Dictionary<String,...>
, mungkinkah membuat metode seperti ContainsKey
case-insensitive?
Ini sepertinya terkait, tetapi saya tidak memahaminya dengan benar: c # Kamus: membuat Key case-insensitive melalui deklarasi
c#
collections
generic-collections
Pak Boy
sumber
sumber
StringComparer.InvariantCultureIgnoreCase
? Ia melakukan apa yang dikatakannya ...Jawaban:
Ini memang terkait. Solusinya adalah dengan memberi tahu contoh kamus untuk tidak menggunakan metode perbandingan string standar (yang sensitif huruf besar) melainkan menggunakan huruf besar yang tidak sensitif. Ini dilakukan dengan menggunakan konstruktor yang sesuai :
Konstruktor mengharapkan
IEqualityComparer
yang memberi tahu kamus cara membandingkan kunci.StringComparer.InvariantCultureIgnoreCase
memberi AndaIEqualityComparer
contoh yang membandingkan string dengan cara case-insensitive.sumber
sumber
Ada beberapa kemungkinan di mana Anda berurusan dengan kamus yang ditarik dari pihak ke-3 atau dll eksternal. Menggunakan LINQ
YourDictionary.Any(i => i.KeyName.ToLower().Contains("yourstring")))
sumber
Any
keSingleOrDefault
Anda tidak akannull
kembali jika itu tidak ada, sebaliknya Anda akan mendapatkan nilai kuncipasangan dengan kedua kunci dan nilai diatur kenull
!Contains
Sepertinya kasus penggunaan yang sangat spesifik untuk sesuatu yang sedang Anda kerjakan saat itu. Sebagai jawaban yang lebih umum dan bermanfaat, saya pikirEquals
lebih baik. Dan pada catatan yang sama, alih-alih menduplikasi stringToLower()
, Akan lebih baik untuk digunakanStringComparison.xxxCase
.dict.Keys.Contains("bla", appropriate comparer)
kelebihan LINQ untuk kemudahan penggunaan.Saya baru saja mengalami masalah yang sama di mana saya membutuhkan kamus caseInsensitive dalam pengontrol ASP.NET Core.
Saya menulis metode ekstensi yang melakukan trik. Mungkin ini bisa bermanfaat bagi orang lain juga ...
Untuk menggunakan metode ekstensi:
Kemudian dapatkan nilai dari kamus dengan:
sumber
Jika Anda tidak memiliki kendali dalam pembuatan instance, misalkan objek Anda didesterilasi dari json dll, Anda dapat membuat kelas wrapper yang diwarisi dari kelas kamus.
sumber