2010-06-18 25 views
6

IDictionary<TKey, TValue> được kế thừa từ IEnumerable<KeyValuePair<TKey, TValue>>, nhưng IDictionary vì một số lý do không được kế thừa từ IEnumerable<DictionaryEntry>. Tôi tự hỏi tại sao? Tôi ghét phải viết điều này một cách xấu xí .OfType<DictionaryEntry>() mỗi khi tôi cần truy vấn một số IDictionary.Tại sao IDictionary (phi chung) kế thừa từ IEnumerable <DictionaryEntry>?

Trả lời

3

Thực hiện thay đổi đó sẽ phá vỡ mọi triển khai hiện tại của giao diện (vì chúng đột nhiên thiếu một số phương thức mà giao diện cho biết chúng phải có).

Hơn nữa, IDictionary chỉ tồn tại cho khả năng tương thích cũ từ thời gian trước khi Generics. Bạn không nên sử dụng nó trong mã mới, trừ khi thực sự cần thiết. Nếu bạn đang thực sự làm việc với các loại đối tượng, bạn có thể sử dụng đối tượng IDictionary <, đối tượng > thay thế.

4

Bởi vì IDictionary là giao diện cũ hơn (tiền chất). Thay đổi nó sẽ phá vỡ mã hiện có. Nó là một di sản.

Vì vậy, vấn đề cơ bản là tại sao bạn (vẫn) sử dụng các lớp dựa trên IDictionary và bạn không thể nâng cấp?

Các vấn đề liên quan