KeyValuePair VS DictionaryEntry


117

Sự khác biệt giữa KeyValuePair là phiên bản chung và DictionaryEntry là gì?

Tại sao KeyValuePair được sử dụng thay vì DictionaryEntry trong lớp Từ điển chung?

Câu trả lời:


108

KeyValuePair<TKey,TValue>được sử dụng thay DictionaryEntryvì nó được tổng quát hóa. Ưu điểm của việc sử dụng a KeyValuePair<TKey,TValue>là chúng ta có thể cung cấp cho trình biên dịch thêm thông tin về những gì có trong từ điển của chúng ta. Để mở rộng về ví dụ của Chris (trong đó chúng tôi có hai từ điển chứa <string, int>các cặp).

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
Chắc chắn nó được khái quát?
danielcooperxyz

26
chắc chắn nó genericised (limeyfied), hoặc genericized (đồ phế thải)
Jenson nút-sự kiện

7
Từ bạn đang tìm là khái quát . ;)
Jason

5
" chung chung " như chung chung hơn chứ không phải chung chung
TheGeekZn

2
Tôi có phải là người duy nhất nói chung chung không?
Mauro Sampietro

51

KeyValuePair <T, T> dùng để lặp lại từ điển <T, T>. Đây là cách hoạt động của .Net 2 (trở đi).

DictionaryEntry dùng để lặp qua HashTables. Đây là cách thực hiện .Net 1.

Đây là một ví dụ:

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 là Generics, còn lại là pre-generics. Việc sử dụng cái cũ được khuyến khích nên đi xa.
Gishu

1
Tôi nghĩ anh ấy hiểu rằng một loại dành cho thuốc generic và một loại thuốc không phải thuốc generic. Tôi nghĩ câu hỏi của anh ấy là tại sao chúng ta cần cả hai?
cdmckay

3
Nếu đó là những gì anh ấy yêu cầu, thì, chúng tôi không thực sự cần cả hai - chỉ là thuốc generic không có sẵn cho đến .net 2 và họ đã để lại những thứ không phải generics để có khả năng tương thích ngược. Một số người vẫn có thể thích sử dụng những thứ không chung chung, nhưng nó không được khuyến khích lắm.
Chris

Câu trả lời này có ý nghĩa hơn đối với tôi.
Merin Nakarmi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.