संभव डुप्लिकेट:
Can anyone explain IEnumerable and IEnumerator to me?आईन्यूमेरेटर और आईनेमरेबल के बीच क्या अंतर है?
क्या IEnumerator और IEnumerable के बीच मतभेद रहे हैं?
संभव डुप्लिकेट:
Can anyone explain IEnumerable and IEnumerator to me?आईन्यूमेरेटर और आईनेमरेबल के बीच क्या अंतर है?
क्या IEnumerator और IEnumerable के बीच मतभेद रहे हैं?
IEnumerable एक अंतरफलक है कि एक विधि GetEnumerator जो एक IEnumerator इंटरफ़ेस देता है परिभाषित करता है, यह बारी में एक संग्रह करने के लिए पढ़ने के लिए पहुंच की अनुमति देता है। एक संग्रह जो IENumerable लागू करता है उसे फ़ोरैच स्टेटमेंट के साथ उपयोग किया जा सकता है।
परिभाषा
IEnumerable
public IEnumerator GetEnumerator();
IEnumerator
public object Current;
public void Reset();
public bool MoveNext();
@Rex एम: मुझे लगता है कि कोड समझ में आता है। IENumerable में एक विधि GetEnumerator है जो आईन्यूमेर * एटोर * देता है, न कि IENumer * सक्षम *। – Lernkurve
@Lernkurve उत्तर को मेरी टिप्पणी पोस्ट करने के बाद सही होने के लिए संशोधित किया गया था। –
IENumerable और IENumerator दोनों इंटरफ़ेस हैं। IENumerable में GetEnumerator नामक एक विधि है। यह विधि retuns (जैसा कि सभी विधियों शून्य सहित कुछ वापस लौटाते हैं) एक और प्रकार जो एक इंटरफ़ेस है और वह इंटरफ़ेस IENumerator है। जब आप अपनी किसी भी संग्रह कक्षा में गणक तर्क लागू करते हैं, तो आप IENumerable (या तो सामान्य या गैर सामान्य) लागू करते हैं। IENumerable में केवल एक विधि है जबकि आईनेमेरेटर में 2 विधियां हैं (MoveNext और रीसेट) और एक प्रॉपर्टी वर्तमान। आसान समझ के लिए आईन्यूमेबल को एक बॉक्स पर विचार करें जिसमें इसके अंदर आईएन्यूमेरेटर शामिल है (हालांकि विरासत या रोकथाम के माध्यम से नहीं)। बेहतर समझ के लिए कोड देखें:
class Test : IEnumerable, IEnumerator
{
IEnumerator IEnumerable.GetEnumerator()
{
throw new NotImplementedException();
}
public object Current
{
get { throw new NotImplementedException(); }
}
public bool MoveNext()
{
throw new NotImplementedException();
}
public void Reset()
{
throw new NotImplementedException();
}
}
एक IEnumerator
एक बात यह है कि गणना कर सकते हैं: यह Current
संपत्ति और MoveNext
और Reset
तरीकों (जो .NET कोड में आप शायद स्पष्ट रूप से फोन नहीं होगा , हालांकि आप कर सकते थे)।
एक IEnumerable
एक ऐसी चीज है जिसे समझाया जा सकता है ... जिसका अर्थ यह है कि इसमें GetEnumerator विधि है जो IEnumerator
देता है।
आप किस का उपयोग करते हैं? IEnumerator
का उपयोग करने का एकमात्र कारण यह है कि यदि आपके पास ऐसा कुछ है जिसमें गणना करने का एक गैर-मानक तरीका है (यानी, अपने विभिन्न तत्वों को एक-एक करके लौटने का), और आपको यह परिभाषित करने की आवश्यकता है कि यह कैसे काम करता है। आप IEnumerator
को लागू करने वाली एक नई कक्षा तैयार करेंगे। लेकिन आपको अभी भी IEnumerator
को IEnumerable
कक्षा में वापस करने की आवश्यकता होगी।
क्या एक प्रगणक (लागू करने IEnumerator<T>
) की तरह दिखता है, इस तरह के List<T>
, Queue<T>,
या Stack<T>
में निहित लोगों के रूप में, किसी भी Enumerator<T>
वर्ग को देखने पर एक नज़र के लिए। IEnumerable
को लागू करने वाली कक्षा को देखने के लिए, किसी भी मानक संग्रह वर्ग को देखें।
एक Enumerator
आपको एक सूची या संग्रह में आइटम दिखाता है। एक गणक का प्रत्येक उदाहरण एक निश्चित स्थिति (पहला तत्व, 7 वां तत्व, आदि) पर है और आपको वह तत्व (IEnumerator.Current
) दे सकता है या अगले (IEnumerator.MoveNext
) पर जा सकता है। जब आप C# में foreach
लूप लिखते हैं, तो संकलक कोड उत्पन्न करता है जो एक गणनाकर्ता का उपयोग करता है।
एक Enumerable
एक कक्षा है जो आपको Enumerator
एस दे सकती है।इसमें GetEnumerator
नामक एक विधि है जो आपको Enumerator
देता है जो इसकी वस्तुओं को देखती है। जब आप foreach
लूप को सी # में लिखते हैं, तो वह कोड जो GetEnumerator
को लूप द्वारा उपयोग किए गए Enumerator
को बनाने के लिए कॉल करता है।
वह ब्लॉग पोस्ट बल्कि गलत है। – SLaks
डुप्लिकेट: http://stackoverflow.com/questions/558304/can-anyone-explain-ienumerable-and-ienumerator-to-me –