关于延迟执行和数据释放,我有一个问题。
考虑以下例子:
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
中的读取器被释放吗,还是它仍然在上下文中考虑,并且会锁定该文件直到程序本身关闭?
break
,不如在ParseFile
结尾处添加一个Take(2)
。 - Servy