2010-08-10 13 views
5

एक बुनियादी सवाल का थोड़ा सा, लेकिन एक ऐसा जो मुझे स्टंप करने लगता है, फिर भी।सी # मतलब में नेस्टेड जेनेरिक क्या करते हैं?

को देखते हुए एक "नेस्टेड जेनेरिक":

IEnumerable<KeyValuePair<TKey, TValue>> 

इस बताते हुए है IEnumerable सामान्य प्रकार है कि खुद को कर रहे हैं KeyValuePair के हो सकता है?

धन्यवाद,

स्कॉट

उत्तर

6

हां। KeyValuePair प्रकार दो जेनेरिक प्रकार पैरामीटर की अपेक्षा करता है।

IEnumerable<KeyValuePair<string, int>> 

या क्या हम अन्य सामान्य मापदंडों को पहले से ही बाहरी वर्ग द्वारा निर्दिष्ट का उपयोग करके उन्हें पॉप्युलेट कर सकते हैं:: हम या तो उन्हें ठोस प्रकार की ओर इशारा करते द्वारा पॉप्युलेट कर सकती

class Dictionary<TKey, TValue> : IEnumerable<KeyValuePair<TKey, TValue>> 

जेनेरिक प्रकार पैरामीटर हमेशा कम से निर्दिष्ट कर रहे हैं " -उज ", या उस बिंदु पर जहां आप कक्षा या विधि का उपयोग कर रहे हैं जिसके लिए उन्हें आवश्यकता है। और किसी भी अन्य पैरामीटर की तरह, आप इसे स्थिर, हार्ड-कोडित मान (या इस मामले में टाइप करें), या किसी अन्य चर के साथ भर सकते हैं।

+0

धन्यवाद! जैसा कि मैंने कहा, हमेशा मुझे स्टंप लगता है, लेकिन यह जानना अच्छा है कि मैं सही रास्ते पर हूं। –

1

हाँ, यह "कुंजी/मान जोड़े की एक IEnumerable है।" इस प्रकार घोषित किया जाएगा:

IEnumberable<KeyValuePair<string, string>> reallyComplicatedDictionary = 
    new IEnumerable<KeyValuePair<string, string>>(); 

या इसी तरह।

केवल एक ही विचार के बारे में मैं सोच सकता हूं कि यह विशेष उपयोग आपको दोहराए गए कुंजी के साथ "शब्दकोश" रखने की अनुमति देता है।

+0

हम्म, हम नए आईनेमरेबल्स बनाने में सक्षम कैसे हुए? ;) –

+0

यह * शब्दकोश अनुबंध का हिस्सा है। विशिष्टता को स्पष्ट रूप से स्पष्ट रूप से लागू किया गया है। –

1

एक नट खोल में, इसका मतलब है कि जब आप उस IEnumerable से अधिक की गणना, आप KeyValuePair<TKey, TValue> (जो के लिए प्रकार TKey और TValue की तैयारी में हैं) प्राप्त करने के लिए जा रहे हैं।

तो, हाँ।

0

यहाँ

IEnumerable<KeyValuePair<string, int>> 

IEnumerable अपने आप में एक साधारण नहीं है। यह जानता है कि इसमें KeyValuePair शामिल होगा। यहां KeyValuePair सामान्य है जिसमें 2 सामान्य प्रकार हो सकते हैं।

संबंधित मुद्दे