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
Post a Comment