2010-10-28 21 views
5

मुझे समझ में नहीं आता कि सी # संग्रह से आईन्यूमेरेटर का उपयोग क्या है। इसका उपयोग किस लिए किया जाता है और इसका उपयोग क्यों किया जाना चाहिए?आईन्यूमेरेटर प्रयोजन

मैंने http://msdn.microsoft.com/en-us/library/system.collections.ienumerator.aspx पर ऑनलाइन देखने की कोशिश की लेकिन वह लेख अधिक समझ में नहीं आता है। कारण मैं पूछता हूं Unity3d गेम इंजन में, यह उपज समारोह के साथ प्रयोग किया जाता है। मैं आईन्यूमेरेटर के उपयोग के कारण को समझने की कोशिश कर रहा हूं।

उत्तर

10

आईन्यूमेरेटर इंटरफ़ेस, जब किसी वर्ग द्वारा कार्यान्वित किया जाता है तो इसे अंतर्निहित फ़ोरैच सिंटैक्स का उपयोग करके पुनरावृत्त किया जा सकता है।

आईन्यूमेरेटर इंटरफ़ेस के लिए पुनरावर्तित होने वाली कक्षा में GetEnumerator फ़ंक्शन के लिए एक विधि हस्ताक्षर परिभाषित करता है जो ऑब्जेक्ट के माध्यम से लूपिंग को नियंत्रित करता है।

public IEnumerator<OrderLine> GetEnumerator() 
    { 
     for (int i=0;i<maxItems;i++) 
     { 
      yield return item[i]; 
     } 
    } 

आप इस उदाहरण में देख सकते हैं, उपज बयान आप गणना में अपनी जगह खोने के बिना फोन करने वाले के लिए नियंत्रण वापसी की सुविधा देता है। जब कॉलर फ़ोरैच लूप की अगली वृद्धि को हिट करता है तो उपज स्टेटमेंट के बाद नियंत्रण लाइन पर वापस भेज दिया जाएगा।

+0

आमतौर पर सख्त तुलना चाहता है: '(int i = 0; i Vlad

+0

ओउप्स। जल्दी में बहुत अधिक मिला। फिक्स्ड। – JohnFx

+0

नहीं कि आईएन्यूमेरेटर भी आधार इंटरफ़ेस है जो लिंक में परिभाषित विस्तार विधियों द्वारा उपयोग किया जाता है – David

1

आप शायद ही कभी आईएन्यूमेरेटर का स्पष्ट रूप से उपयोग करते हैं, लेकिन इसके साथ काम करने के साथ-साथ foreach के साथ कई एक्सटेंशन विधियां भी काम करती हैं। सभी संग्रह इसे लागू करते हैं, और यह इटरेटर पैटर्न का एक उदाहरण है।

1

यह केवल एक इंटरफ़ेस है जो ऑब्जेक्ट्स को आसानी से संग्रहों पर पुन: प्रयास करने के लिए संचालन करने की अनुमति देता है। आप ऑब्जेक्ट्स बनाने के लिए इसका उपयोग कर सकते हैं जो एक फोरैच निर्माण या समान वाक्यविन्यास के साथ एक कस्टम संग्रह पर फिर से शुरू होता है।