c# - Adding a collection of a subclass with AddRange -


अगर मेरे पास ये दो वर्ग हैं:

  class A {} वर्ग B: A { }  

और मैं एक सूची & lt; A & gt; लेकिन मैं एक सूची & lt; B & gt; सूची और लेफ्टिनेंट; ए & gt; एड्रेंज (सूची & lt; B & gt;) को कॉल करके, लेकिन कंपाइलर इनकार करता है:

  तर्क '1': 'System.Collections.Generic.List & lt; A & gt; ' के लिए 'System.Collections.Generic.IEnumerable & lt; B & gt;  

जिसे मैं पूरी तरह से समझता हूं क्योंकि IEnumerable & lt; B & gt; IEnumerable & lt; A & gt; से प्राप्त नहीं होता है, इसके सामान्य प्रकार का विरासत है।

मेरा समाधान सूची & lt; B & gt; और व्यक्तिगत रूप से आइटम जोड़ते हैं क्योंकि सूची & lt; A & gt;। जोड़ें (ए आइटम) बी आइटम के साथ काम करेगा:

  foreach (सूची में आइटम बीफ़ीबाइटम्स) {listOfAItems.Add (item); }  

हालांकि, यह बल्कि गैर-अभिव्यक्ति है क्योंकि मुझे क्या चाहिए, केवल AddRange है।

मैं

  सूची & lt; B & gt का उपयोग कर सकता हूं ; .ConvertAll & lt; A & gt; (प्रतिनिधि (बी आइटम) {रिटर्न (ए) आइटम;});  

लेकिन यह अनावश्यक रूप से जटिल है और एक मिथ्या नाम है क्योंकि मैं परिवर्तित नहीं कर रहा हूँ, मैं कास्टिंग कर रहा हूं।

प्रश्न : अगर मैं मेरी अपनी सूची-तरह की संग्रह लिखें जिसे मैं उस पद्धति में जोड़ दूंगा जिससे मुझे बी के संग्रह को ए के संग्रह में कॉपी करने की अनुमति मिलेगी, जैसे कि एक-लाइनर की सूची & lt; A & gt;। ऐड्रेंज (सूची & lt; B & gt;) और अधिकतम प्रकार-सुरक्षा बनाए रखें (और अधिकतम से मेरा मतलब है कि तर्क दोनों एक संग्रह और प्रकार inhertance जांच है।)

वास्तव में, सामान्य प्रकार अभी भिन्न नहीं हैं सी # 4.0 में, IEnumerable & lt; B > को IEnumerable & lt; ए > के लिए परिवर्तनीय किया जाएगा यदि बी संदर्भ संदर्भ के माध्यम से A को परिवर्तनीय है इस सुविधा के डिजाइन पर कुछ विवरण के लिए, देखें:


Comments

Popular posts from this blog

python - Overriding the save method in Django ModelForm -

html - CSS autoheight, but fit content to height of div -

qt - How to prevent QAudioInput from automatically boosting the master volume to 100%? -