निम्न कोड पर विचार करें, पहला यह दर्शाता है कि "क्लीनअप" निष्पादित होता है जब हम स्ट्रिंग के IENumerable पर फिर से समाप्त हो जाते हैं। दूसरा पास मुझे दुःख पैदा कर रहा है। मुझे अंत तक पहुंचने से पहले IENumerable को छोड़ने में सक्षम होना चाहिए, और उसके बाद साफ़ कोड निष्पादित करें। लेकिन यदि आप इसे चलाते हैं तो आप देखेंगे कि दूसरे पास में साफ सफाई कभी नहीं होती है।मैं अंत में पुन: प्रयास किए बिना एक आईन्यूमेरेटर को कैसे छोड़ सकता हूं?
इस तरह एक आईनेमरेबल को त्यागने का पसंदीदा तरीका क्या है?
static void Main(string[] args)
{
// first pass
foreach (String color in readColors())
Console.WriteLine(color);
// second pass
IEnumerator<string> reader = readColors().GetEnumerator();
if (reader.MoveNext())
{
Console.WriteLine(reader.Current);
reader.Dispose();
}
}
static IEnumerable<string> readColors()
{
string[] colors = { "red", "green", "blue" };
for (int i = 0; i < colors.Length; i++)
yield return colors[i];
Console.WriteLine("Cleanup goes here");
}
मैं कुछ याद आ रही हो सकता है, या अपने उदाहरण अति सरल है ... लेकिन क्या सफाई आप readColors में गणन के अंत में चलाने के लिए ened करते हैं? ऐसा लगता है कि जीसी चीजों को ठीक से संभालने में सक्षम होना चाहिए। –
यदि आपके पास कस्टम संग्रह है, तो आप आईडीआईस्पोज़ेबल भी लागू कर सकते हैं?! – serhio