KeyValuePair VS DictionaryEntry


117

Qual é a diferença entre KeyValuePair que é a versão genérica e DictionaryEntry?

Por que KeyValuePair é usado em vez de DictionaryEntry na classe Dicionário genérico?

Respostas:


108

KeyValuePair<TKey,TValue>é usado no lugar de DictionaryEntryporque é generificado. A vantagem de usar um KeyValuePair<TKey,TValue>é que podemos fornecer ao compilador mais informações sobre o que está em nosso dicionário. Para expandir o exemplo de Chris (no qual temos dois dicionários contendo <string, int>pares).

Dictionary<string, int> dict = new Dictionary<string, int>();
foreach (KeyValuePair<string, int> item in dict) {
  int i = item.Value;
}

Hashtable hashtable = new Hashtable();
foreach (DictionaryEntry item in hashtable) {
  // Cast required because compiler doesn't know it's a <string, int> pair.
  int i = (int) item.Value;
}

4
Certamente é generalizado?
danielcooperxyz

26
certamente é genérico (limificado) ou genérico (yankeefiado)
jenson-button-event

7
A palavra que você está procurando é generalizada . ;)
Jason

5
"generificado" como em mais genérico não geral
TheGeekZn

2
Eu sou o único que diria genérico?
Mauro Sampietro

52

KeyValuePair <T, T> é para iteração por meio do Dicionário <T, T>. Esta é a maneira .Net 2 (e mais adiante) de fazer as coisas.

DictionaryEntry é para iterar por meio de HashTables. Esta é a maneira .Net 1 de fazer as coisas.

Aqui está um exemplo:

Dictionary<string, int> MyDictionary = new Dictionary<string, int>();
foreach (KeyValuePair<string, int> item in MyDictionary)
{
  // ...
}

Hashtable MyHashtable = new Hashtable();
foreach (DictionaryEntry item in MyHashtable)
{
  // ...
}

4
KeyValuePair é genérico, o outro é pré-genérico. O uso do primeiro é recomendado indo para frente.
Gishu

1
Acho que ele entende que um é para genéricos e o outro é para não genéricos. Acho que sua pergunta é por que precisamos de ambos?
cdmckay

3
Se é isso que ele está pedindo, bem, nós realmente não precisamos de ambos - é apenas que os genéricos não estavam disponíveis até .net 2, e eles deixaram o material não genérico para compatibilidade com versões anteriores. Algumas pessoas ainda podem gostar de usar o material não genérico, mas não é altamente recomendado.
Chris

Essa resposta fez mais sentido para mim.
Merin Nakarmi
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.