से कनवर्ट नहीं किया जा सकता है, मैंने हाल ही में किसी सूची में AddRange (IEnumerable) को आजमाने में परेशानी में भाग लिया है। शायद एक क्लासिक मुद्दा, लेकिन मुझे वास्तव में अभी तक यह नहीं मिला है।सी # IENumerable <Base> से IENumerable <Derived>
मैं समझता हूं कि सूची पैरामीटर की अपेक्षा करने वाली विधियां किसी सूची से संतुष्ट नहीं हैं, क्योंकि वे सूची में आधार जोड़ने का प्रयास कर सकते हैं, जो स्पष्ट रूप से असंभव है।
लेकिन अगर मुझे यह सही तरीके से मिलता है, क्योंकि IENumerables स्वयं को बदला नहीं जा सकता है, इसलिए इसे इस मामले में काम करना चाहिए।
कोड मैं इस तरह दिखता है के बारे में सोचा:
class Foo
{
}
class Bar : Foo
{
}
class FooCol
{
private List<Foo> m_Foos = new List<Foo>();
public void AddRange1(IEnumerable<Foo> foos)
{
m_Foos.AddRange (foos); // does work
}
public void AddRange2<T>(IEnumerable<T> foos) where T : Foo
{
m_Foos.AddRange (foos); // does not work
}
}
class Program
{
static void Main(string[] args)
{
FooCol fooCol = new FooCol();
List<Foo> foos = new List<Foo>();
List<Bar> bars = new List<Bar>();
fooCol.AddRange1 (foos); // does work
fooCol.AddRange1 (bars); // does not work
fooCol.AddRange2 (foos); // does work
fooCol.AddRange2 (bars); // does work
}
}
मैं AddRange2 विधि में संकलक करने के लिए एक संकेत के पारित करने के लिए कोशिश की, लेकिन यह सिर्फ चारों ओर समस्या के लिए ले जाया गया।
क्या सोचने का मेरा तरीका त्रुटिपूर्ण है? क्या यह भाषा का एक सीमा है या यह डिजाइन द्वारा है?
आईआईआरसी, इस तरह के संचालन के लिए समर्थन जावा 1.5 में जोड़ा गया था, तो हो सकता है कि इसे भविष्य में किसी भी समय सी # में जोड़ा जाएगा ...?
हाल ही में http://stackoverflow.com/questions/632399 –
सहित कई अन्य प्रश्नों का डुप्लिकेट, मुझे खेद है। मेरे google-jutsu अभी भी सुधार की जरूरत है। – mafu
कोई समस्या नहीं है। प्रति टैग एफएक्यू, आईएमओ होना अच्छा लगेगा ... –