मेरे पास स्थगित निष्पादन और डेटा का निपटान करने के बारे में एक प्रश्न है।"उपयोग" कथन के भीतर उपज का उपयोग करते समय, कब निपटान होता है?
private IEnumerable<string> ParseFile(string fileName)
{
using(StreamReader sr = new StreamReader(fileName))
{
string line;
while((line = sr.ReadLine()) != null)
{
yield return line;
}
}
}
private void LineReader(string fileName)
{
int counter = 0;
foreach(string line in ParseFile(fileName))
{
if(counter == 2)
{
break; // will this cause a dispose on the StreamReader?
} else
{
Console.WriteLine(line);
counter++;
}
}
}
break
बयान तुरंत ParseFile
में पाठक निपटान के लिए कारण या यह अभी भी संदर्भ में माना जाता है और जब तक कार्यक्रम में ही बंद कर दिया है फ़ाइल खुला लॉक हो जाएगा होगा:
निम्नलिखित उदाहरण पर विचार?
एक त्वरित कंसोल ऐप लिखें और पता लगाएं :) – jjxtra
काउंटर दो हिट करते समय 'ब्रेक' का उपयोग करने के बजाय ओह साइड नोट, बस 'पारसेफाइल' के अंत में 'टेक (2) 'जोड़ें। – Servy
जॉन स्कीट की पुस्तक "सी # गहराई में" उठाएं यदि आप इटरेटर ब्लॉक में क्या होता है, या केवल भाषा की कल्पना को देखते हुए वास्तव में अच्छी व्याख्या करना चाहते हैं, जैसा कि वह अक्सर सुझाता है। –