में उपज रिटर्न स्टेटमेंट के बीच सटीक अंतर क्या है वर्तमान में मैं कुछ पुस्तकालयों के साथ काम कर रहा हूं जो इटरेटर के माध्यम से स्थगित निष्पादन लागू कर रहे हैं। कुछ परिस्थितियों में मुझे प्राप्तकर्ता पुनरावर्तक को "आगे" करने की आवश्यकता है। अर्थात। मुझे बुलाए गए विधि से IEnumerable<T>
उदाहरण प्राप्त करना होगा और इसे तुरंत वापस करना होगा।एक आईनेमरेबल इंस्टेंस लौटने और सी #
अब मेरा प्रश्न: क्या प्राप्तकर्ता IEnumerable<T>
को वापस लाने या लूप के माध्यम से इसे फिर से प्राप्त करने के बीच कोई प्रासंगिक अंतर है?
IEnumerable<int> GetByReturn()
{
return GetIterator(); // GetIterator() returns IEnumerable<int>
}
// or:
IEnumerable<int> GetByReYielding()
{
for(var item in GetIterator()) // GetIterator() returns IEnumerable<int>
{
yield return item;
}
}
पुन: उपज का लाभ क्या है? यदि आप वस्तुओं पर कुछ कार्रवाई करना चाहते हैं, तो आप चारों ओर लूपिंग नहीं करेंगे, है ना? यदि नहीं, तो छोटे-कोड-संस्करण का उपयोग क्यों न करें? –
मैं अपने प्रयोगों (और आईएल निरीक्षण) से निष्कर्ष निकाला हूं, कि GetByReYielding() का निष्पादन स्वयं को स्थगित कर दिया जाएगा (GetIterator() काम से मुक्त), लेकिन GetByReturn() का निष्पादन नहीं है। बस इतना ही। – Nico