फ़ंक्शन को केवल IEnumerator<T>
लौटने के लिए कहा जाता है; उसके बाद, MoveNext()
विधि और Current
संपत्ति परिणामों के माध्यम से पुनरावृति करने के लिए उपयोग किया जाता है:
foreach (Foo f in GetFoos())
{
// Do stuff
}
कुछ हद तक के बराबर है:
using (IEnumerator<Foo> iterator = GetFoos().GetEnumerator())
{
while (iterator.MoveNext())
{
Foo f = iterator.Current;
// Do stuff
}
}
ध्यान दें कि iterator अंत में निपटान किया जाता है - यह विशेष रूप है इटरेटर ब्लॉक से संसाधनों का निपटान करने के लिए महत्वपूर्ण, उदाहरण:
public IEnumerable<string> GetLines(string file)
{
using (TextReader reader = File.OpenText(file))
{
string line;
while ((line = reader.ReadLine()) != null)
{
yield return line;
}
}
}
उपरोक्त कोड में, आप वास्तव में फ़ाइल को बंद करना चाहते हैं आप इसे फिर से खत्म कर देते हैं, और संकलक IDisposable
को उस काम को करने के लिए चालाकी से लागू करता है।
स्रोत
2009-10-27 19:25:11
इसे आज़माएं और देखें - 'GetMyStrings()' में ब्रेकपॉइंट रखें और देखें कि डीबगर कितनी बार रुकता है! निपटान चर्चा के लिए – AakashM