Existe uma maneira rápida e simples de verificar se existe uma chave em um NameValueCollection sem passar por ela?
Procurando algo como Dictionary.ContainsKey () ou semelhante.
Existem muitas maneiras de resolver isso, é claro. Imaginando se alguém pode ajudar a coçar meu cérebro.
c#
.net
namevaluecollection
Muhammad Yussuf
fonte
fonte
Respostas:
Do MSDN :
Então você pode apenas:
collection[key]
chamabase.Get()
entãobase.FindEntry()
que internamente usaHashtable
com desempenho O (1).fonte
0
igual anull
... sryUse este método:
É o mais eficiente
NameValueCollection
e não depende de a coleção conternull
valores ou não.fonte
using System.Linq;
quando usar esta solução.Não acho que nenhuma dessas respostas esteja correta / ideal. NameValueCollection não apenas não distingue entre valores nulos e valores ausentes, mas também faz distinção entre maiúsculas e minúsculas em relação às chaves. Assim, acho que uma solução completa seria:
fonte
Sim, você pode usar o Linq para verificar a
AllKeys
propriedade:No entanto, um
Dictionary<string, string[]>
seria muito mais adequado a esse propósito, talvez criado por meio de um método de extensão:fonte
collection[key]
internamente usosHashtable
que é O (1)collection[key]
não faz distinção entre a chave não estar presente e um valor nulo sendo armazenado nessa chave.Você pode usar o
Get
método e verificar senull
o método retornaránull
se o NameValueCollection não contiver a chave especificada.Veja MSDN .
fonte
index
dokey
que chamar o método. Não é?Se o tamanho da coleção for pequeno, você poderá usar a solução fornecida por rich.okelly. No entanto, uma grande coleção significa que a geração do dicionário pode ser notavelmente mais lenta do que apenas pesquisar na coleção de chaves.
Além disso, se seu cenário de uso estiver pesquisando chaves em diferentes momentos, onde o NameValueCollection pode ter sido modificado, a geração do dicionário a cada vez poderá ser mais lenta do que apenas pesquisar a coleção de chaves.
fonte
Isso também pode ser uma solução sem a necessidade de introduzir um novo método:
fonte
Como você pode ver nas fontes de referência, NameValueCollection herda de NameObjectCollectionBase .
Então você escolhe o tipo base, obtém a hashtable privada por meio de reflexão e verifica se ela contém uma chave específica.
Para que ele funcione também em mono, é necessário ver qual é o nome da hashtable em mono, que é algo que você pode ver aqui (m_ItemsContainer) e obter o mono-campo, se o FieldInfo inicial for nulo (mono- tempo de execução).
Como isso
para código .NET 2.0 não puro e não refletivo ultra-puro, você pode fazer um loop sobre as chaves, em vez de usar a tabela de hash, mas isso é lento.
fonte
No VB é:
Em C # deve ser apenas:
Não tenho certeza se deve ser
null
ou""
mas isso deve ajudar.fonte
Dictionary
estrutura de dados, como emMyNameValueCollection[Key]
, e nãoMyNameValueCollection(Key)
, que espera uma chamada de método.Estou usando esta coleção, quando trabalhei na coleção de pequenos elementos.
Onde os elementos são muito, acho que preciso usar "Dicionário". Meu código:
Ou pode ser usado isso:
fonte
Esteja ciente de que a chave pode não ser única e que a comparação geralmente diferencia maiúsculas de minúsculas. Se você deseja apenas obter o valor da primeira chave correspondente e não se preocupar com maiúsculas e minúsculas, use o seguinte:
fonte
Valor de retorno Tipo: System.Boolean trueSe o NameValueCollection contiver chaves que não são nulas; caso contrário, false. LIGAÇÃO
fonte