c# - सूची<बार> सूची<Foo> से कनवर्ट नहीं कर सकता




.net generics (2)

मेरे पास इस तरह एक सेट अप है:

abstract class Foo {}
class Bar : Foo {}

और इस फ़ॉर्म के कहीं और एक विधि:

void AddEntries(List<Foo>) {}

मैं टाइप Bar की ऑब्जेक्ट्स की एक सूची का उपयोग करके इस विधि को कॉल करने की कोशिश कर रहा हूं

List<Bar> barList = new List<Bar>()
AddEntries(barList);

लेकिन यह मुझे त्रुटि देता है:

सूची <बार> सूची <Foo> से कनवर्ट नहीं कर सकता

क्या इस समस्या के आसपास वैसे भी है? मुझे अमूर्त वर्ग का उपयोग करके विधि परिभाषा को रखने की आवश्यकता है।



इसे एक साधारण कारण के लिए अनुमति नहीं है। नीचे संकलित मान लें:

AddEntries(new List<Bar>());

void AddEntries(List<Foo> list)
{
   // list is a `List<Bar>` at run-time
   list.Add(new SomethingElseDerivingFromFoo()); // what ?!
}

यदि आपका कोड संकलित होगा, तो आपके पास असुरक्षित जोड़ है (जो पूरी जेनेरिक सूचियों को व्यर्थ बनाता है) जहां आपने वास्तव में एक List<Bar> (रनटाइम प्रकार) को SomethingElseDerivingFromFoo जोड़ा।

अपनी समस्या को हल करने के लिए, आप जेनरिक का उपयोग कर सकते हैं:

void AddEntries<T>(List<T> list) where T:Foo
{

}




inheritance