मैं एक बाहरी वर्गआईडीवी <,> contravariance?
public static void DoStuffWithAnimals(IDictionary<string, Animal> animals)
मेरी बुला कोड में निम्न विधि है, मैं पहले से ही एक Dictionary<string, Lion>
वस्तु है, लेकिन मैं इस विधि के तर्क के रूप में इस में पारित नहीं हो सकता। तो IDictionary<,>
contravariant नहीं है? मुझे कोई कारण नहीं दिख रहा है कि यह क्यों काम नहीं करना चाहिए।
एकमात्र समाधान मैं के बारे में सोच सकता है:
var animals = new Dictionary<string, Animal>();
foreach(var kvp in lions) {
animals.Add(kvp.Key, kvp.Value);
}
वहाँ ही वस्तुओं की एक नई शब्दकोश बनाए बिना, इस विधि में इस शब्दकोश पारित करने के लिए कोई रास्ता नहीं है?
संपादित करें:
यह मेरी विधि है के रूप में, मुझे पता है कि केवल सदस्य मैं शब्दकोश से उपयोग कर रहा हूँ TValue this[TKey key]
की गेटर, जो IDictionary<TKey, TValue>
का एक सदस्य है इस परिदृश्य में ऐसा है, तो है , मैं पैरामीटर के लिए 'व्यापक' प्रकार का उपयोग करने में असमर्थ हूं।
IDictionary अपरिवर्तनीय हो रहा है। इसकी घोषणा में विवरण/आउट शामिल नहीं है। –