2008-09-29 4 views
7

मैं जेनेरिक IDictionary के गैर सामान्य IDictionary पर एक उदाहरण को परिवर्तित करना चाहता हूं। क्या मैं इसे IDictionary का नया उदाहरण बनाये बिना कर सकता हूं? क्या इस कार्य के लिए कोई ढांचा समर्थन है?जेनेरिक शब्दकोश को गैर-जेनेरिक के बिना समझाए बिना कैसे परिवर्तित करें?

मैंने क्लास में जेनेरिक IDictionary को लपेटने की कोशिश की जो नोंगनेटिक आईडीनेर लागू करता है हालांकि मुझे पता चला कि मुझे किसी भी तरह जेनेरिक आईसीलेक्शन को नॉनजेनेरिक में परिवर्तित करना है, इसलिए मैं मार्क ग्रेवल समाधान के साथ जाता हूं।

उत्तर

18

यह सब कंक्रीट कार्यान्वयन पर निर्भर करता है जिसका आप उपयोग कर रहे हैं।

उदाहरण के लिए, शब्दकोश < TKey, TValue > औजार दोनों सामान्य IDictionary < TKey, TValue > और गैर सामान्य IDictionary - इसलिए यदि आप एक शब्दकोश < TKey है, TValue > आप इसे के रूप में या तो इस मुद्दे के बिना उपयोग कर सकते हैं:

 Dictionary<int, string> lookup = new Dictionary<int,string>(); 
     IDictionary<int,string> typed = lookup; 
     IDictionary untyped = lookup; 

बहरहाल, यह आवश्यक रूप से सभी IDictionary < TKey के लिए, TValue > imlpementations, लागू नहीं होता है, क्योंकि यह सच नहीं है कि IDictionary < TKey, TValue >: IDictionary। यदि आप कुछ सामान्य कोड के आंतों में गहरे हैं, तो आप वर्तमान शब्दकोश का परीक्षण कर सकते हैं:

 IDictionary<int,string> typed = ... 
     IDictionary untyped = typed as IDictionary; 
     if(untyped == null) {/* create by enumeration */} 
संबंधित मुद्दे