मैं एक विस्तार विधि है कि IDictionary<K, S<V>>
संग्रह/अनुक्रम में किसी भी प्रकार के आयोजन में परिवर्तित कर देंगे लिखने के लिए कोशिश कर रहा हूँ (S<V>
) ILookup<K, V>
जिसमें अधिक उचित डेटा संरचना है उन मामलों में। इसका मतलब यह है मैं अलग S
प्रकार और इंटरफेस पर काम करने के लिए अपने एक्सटेंशन चाहते हैं:एकल विस्तार विधि <कश्मीर, IEnumerable/IList/ICollection <V>>
IDictionary<K, IEnumerable<V>>
IDictionary<K, ICollection<V>>
IDictionary<K, List<V>>
आदि आदर्श रूप में, मैं नहीं चाहता कि अलग लिखना चाहते हैं प्रत्येक संभावित संग्रह प्रकार के लिए कार्यान्वयन और मैं अपनी नौकरी करने के लिए टाइप अनुमान चाहता हूं।
क्या मैं कोशिश की है है:
public static ILookup<TKey, TValue>ToLookup<TKey, TCollection, TValue>(
this IDictionary<TKey, TCollection> dictionary)
where TCollection : IEnumerable<TValue>
लेकिन यह पैरामीटर सूची में कोई TValue
है, तो अनुमान टाइप यह पता लगाने में असमर्थ है - मैं "विधि ToLookup के लिए प्रकार तर्क से नहीं लगाया जा सकता उपयोगितायें"।
क्या कोई मौका है कि यह विधि के लिए नकली TValue
-typed पैरामीटर जोड़ने से किसी अन्य तरीके से काम कर सकता है?
उम्मीद के उपयोग के उदाहरण
मैं सब से ऊपर आशा है कि संभव हो सकता है और अपने एक विस्तार विधि के लिए एक कॉल में परिणाम के लिए कॉल:
var dictOfIEnumerables = new Dictionary<int, IEnumerable<int>>();
var lookupFromIEnumerables = dictOfIEnumerables.ToLookup();
var dictOfICollections = new Dictionary<int, ICollection<int>>();
var lookupFromICollections = dictOfICollections.ToLookup();
var dictOfLists = new Dictionary<int, List<int>>();
var lookupFromLists = dictOfLists.ToLookup();
जब आप इसका उपयोग करते हैं, तो जेनरिक – Mgetz
@Mgetz के लिए स्पष्ट रूप से प्रकारों को निर्दिष्ट करने का प्रयास करें - मुझे लगता है कि यह बिल्कुल सही है कि नोथरडेव से बचने की कोशिश करता है - या तो स्पष्ट रूप से प्रकारों को निर्दिष्ट करने या प्रकारों को मजबूर करने के लिए नकली तर्कों को निर्दिष्ट करना। अपेक्षित उपयोग का नमूना शायद चीजों को साफ़ करेगा। –
हां, जैसा कि मैंने उल्लेख किया है, मैं अपनी नौकरी करने के लिए टाइप अनुमान चाहता हूं। प्रश्न के लिए अपेक्षित उपयोग उदाहरण जोड़ देंगे। – NOtherDev