2010-06-18 7 views
6

IDictionary<TKey, TValue>IEnumerable<KeyValuePair<TKey, TValue>> से विरासत प्राप्त करता है, लेकिन IDictionary किसी कारण से IEnumerable<DictionaryEntry> से प्राप्त नहीं होता है। मुझे आश्चर्य है क्योंकि? मुझे इस बदसूरत .OfType<DictionaryEntry>() लिखने से नफरत है जब मुझे IDictionary के खिलाफ कोई प्रश्न पूछने की आवश्यकता होती है।आईडीनेर (गैर-जेनेरिक) क्यों नहीं है Inumerable <DictionaryEntry> से?

उत्तर

3

उस परिवर्तन को इंटरफ़ेस के हर मौजूदा कार्यान्वयन को तोड़ देगा (क्योंकि वे इंटरफ़ेस के कुछ तरीकों से अचानक गायब हो जाएंगे)।

इसके अलावा, आईडीने केवल जेनेरिक से पहले समय से विरासत संगतता के लिए मौजूद है। आपको इसे नए कोड में इस्तेमाल नहीं करना चाहिए, जब तक कि बिल्कुल जरूरी न हो। यदि आप वास्तव में ऑब्जेक्ट प्रकारों के साथ काम कर रहे हैं, तो आप IDictionary < ऑब्जेक्ट का उपयोग कर सकते हैं, इसके बजाय > ऑब्जेक्ट करें।

4

क्योंकि IDictionary एक पुराना (प्री-जेनरिक) इंटरफ़ेस है। इसे बदलना मौजूदा कोड तोड़ देगा। यह एक विरासत है।

तो अंतर्निहित मुद्दा यह है कि आप अभी भी (अभी भी) IDictionary आधारित कक्षाओं का उपयोग क्यों कर रहे हैं, और आप अपग्रेड नहीं कर सकते?

संबंधित मुद्दे