KeyValuePair VS DictionaryEntry


117

제네릭 버전 인 KeyValuePair와 DictionaryEntry의 차이점은 무엇입니까?

일반 Dictionary 클래스에서 DictionaryEntry 대신 KeyValuePair가 사용되는 이유는 무엇입니까?

답변:


108

KeyValuePair<TKey,TValue>생성 DictionaryEntry되기 때문에 대신 사용됩니다 . a 사용의 장점은 KeyValuePair<TKey,TValue>사전에있는 내용에 대한 자세한 정보를 컴파일러에 제공 할 수 있다는 것입니다. Chris의 예제 ( <string, int>쌍을 포함하는 두 개의 사전이 있음 )를 확장합니다.

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
확실히 일반화 되었습니까?
danielcooperxyz

26
확실히 그것은 genericised (limeyfied), 또는 (yankeefied) genericized 것
젠슨 버튼 이벤트

7
찾고있는 단어는 일반화되었습니다 . ;)
Jason

5
이상에서와 같이 "제네릭" 일반적인 하지 일반
TheGeekZn

2
제네릭이라고 말할 유일한 사람입니까?
Mauro Sampietro 2016

51

KeyValuePair <T, T>는 Dictionary <T, T>를 반복하기위한 것입니다. 이것이 .Net 2 (및 그 이후의) 방식입니다.

DictionaryEntry는 HashTable을 반복하기위한 것입니다. 이것이 .Net 1 방식입니다.

예를 들면 다음과 같습니다.

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는 Generics이고 다른 하나는 pre-generics입니다. 전자를 사용하는 것이 좋습니다.
Gishu

1
하나는 제네릭 용이고 다른 하나는 비 제네릭 용이라는 것을 그는 이해한다고 생각합니다. 그의 질문은 왜 우리가 둘 다 필요합니까?
cdmckay

3
그것이 그가 요구하는 것이라면, 글쎄, 우리는 실제로 둘 다 필요하지 않습니다. 단지 제네릭은 .net 2까지 사용할 수 없었고, 이전 버전과의 호환성을 위해 제네릭이 아닌 것을 남겨 두었습니다. 일부 사람들은 여전히 ​​비 일반적인 것을 사용하기를 원할 수 있지만 적극 권장하지는 않습니다.
Chris

이 대답은 나에게 더 의미가 있습니다.
Merin Nakarmi 2017
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.