|
|
1
11
编译器合成的迭代器实现IDisposable,当foreach循环退出时foreach调用该迭代器。 迭代器的dispose()方法将在早期退出时清除using语句。 只要在foreach循环中使用迭代器,使用()块,或者以其他方式调用dispose()方法,迭代器就会被清除。 |
|
|
2
2
连接将自动关闭,因为您在“使用”块内使用它。 |
|
|
3
2
从我尝试过的简单测试来看,AKU是正确的,一旦foreach块退出,就会调用dispose。 @大卫:但是调用堆栈在两次调用之间保持不变,所以连接不会被关闭,因为在下一次调用时,我们将在yield之后返回到下一条指令,即while块。 我的理解是,当迭代器被释放时,连接也将被释放。我还认为不需要connection.close,因为当由于using子句而释放对象时,它会得到处理。 这是一个简单的程序,我试着测试它的行为…
|
|
4
0
从判断 this technical explanation ,您的代码将无法按预期工作,但会在第二个项目上中止,因为返回第一个项目时连接已关闭。 @乔尔:是的,我应该继续读下去。 Part 3 本系列中的说明编译器为finally块添加了特殊处理,以便仅在 真实的 结束。 |