Apakah ada cara cepat dan sederhana untuk memeriksa apakah ada kunci di NameValueCollection tanpa melalui itu?
Mencari sesuatu seperti Dictionary.ContainsKey () atau yang serupa.
Tentu saja ada banyak cara untuk menyelesaikannya. Hanya ingin tahu apakah seseorang dapat membantu menggaruk gatal otak saya.
c#
.net
namevaluecollection
Muhammad Yussuf
sumber
sumber
Jawaban:
Dari MSDN :
Jadi Anda bisa:
collection[key]
panggilanbase.Get()
makabase.FindEntry()
yang internal menggunakanHashtable
dengan kinerja O (1).sumber
0
sama dengannull
... sryGunakan metode ini:
Ini adalah yang paling efisien untuk
NameValueCollection
dan tidak bergantung pada apakah koleksi mengandungnull
nilai atau tidak.sumber
using System.Linq;
saat menggunakan solusi ini.Saya tidak berpikir salah satu dari jawaban ini cukup benar / optimal. NameValueCollection tidak hanya tidak membedakan antara nilai nol dan nilai yang hilang, tetapi juga case-insensitive terkait dengan kunci itu. Jadi, saya pikir solusi lengkapnya adalah:
sumber
Ya, Anda dapat menggunakan Linq untuk memeriksa
AllKeys
properti:Namun a
Dictionary<string, string[]>
akan jauh lebih cocok untuk tujuan ini, mungkin dibuat melalui metode ekstensi:sumber
collection[key]
internal menggunakanHashtable
yang O (1)collection[key]
tidak membuat perbedaan antara kunci tidak hadir dan nilai nol disimpan terhadap kunci itu.Anda bisa menggunakan
Get
metode dan memeriksanull
sebagai metode akan kembalinull
jika NameValueCollection tidak mengandung kunci yang ditentukan.Lihat MSDN .
sumber
index
carakey
memanggil metode. Bukan?Jika ukuran koleksi kecil, Anda bisa menggunakan solusi yang disediakan oleh rich.okelly. Namun, koleksi besar berarti bahwa generasi kamus mungkin terasa lebih lambat daripada hanya mencari koleksi kunci.
Juga, jika skenario penggunaan Anda mencari kunci di berbagai titik waktu, di mana NameValueCollection mungkin telah dimodifikasi, membuat kamus setiap kali mungkin, lebih lambat, lebih lambat daripada hanya mencari koleksi kunci.
sumber
Ini juga bisa menjadi solusi tanpa harus memperkenalkan metode baru:
sumber
Seperti yang dapat Anda lihat di sumber referensi, NameValueCollection mewarisi dari NameObjectCollectionBase .
Jadi Anda mengambil tipe dasar, dapatkan hashtable pribadi melalui refleksi, dan periksa apakah itu berisi kunci tertentu.
Agar dapat bekerja di Mono juga, Anda perlu melihat apa nama hashtable di mono, yang merupakan sesuatu yang dapat Anda lihat di sini (m_ItemsContainer), dan dapatkan bidang-mono, jika FieldInfo awal adalah null (mono- runtime).
Seperti ini
untuk kode .NET 2.0 ultra-murni non-reflektif, Anda dapat mengulangi kunci, alih-alih menggunakan tabel hash, tapi itu lambat.
sumber
Di VB itu:
Dalam C # seharusnya:
Tidak yakin apakah harus
null
atau""
tetapi ini akan membantu.sumber
Dictionary
struktur data, seperti padaMyNameValueCollection[Key]
, daripadaMyNameValueCollection(Key)
, yang mengharapkan pemanggilan metode.Saya menggunakan koleksi ini, ketika saya bekerja di koleksi elemen kecil.
Di mana banyak elemen, saya pikir perlu menggunakan "Kamus". Kode saya:
Atau dapat menggunakan ini:
sumber
Berhati-hatilah bahwa kunci mungkin tidak unik dan perbandingannya biasanya case-sensitive Jika Anda ingin mendapatkan nilai kunci pencocokan pertama dan tidak peduli tentang kasus, gunakan ini:
sumber
Return Value Type: System.Boolean true jika NameValueCollection berisi kunci yang bukan nol; jika tidak, salah. TAUTAN
sumber