![]() |
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块添加了特殊处理,以便仅在 真实的 结束。 |
![]() |
Ahmed Elbohoty · Python为什么我在这里没有输出 7 年前 |
![]() |
Aaron_ab · python-yield(yield)做什么? 7 年前 |
![]() |
Chancelot · 块执行的测试ruby屈服方法 7 年前 |
![]() |
georg · 从阵列创建的生成器列表中生成 7 年前 |
![]() |
TinyTheBrontosaurus · 如何在产量中扩展元组? 7 年前 |
![]() |
Eric Burel · 按顺序运行一系列sagas效果 7 年前 |
![]() |
geostocker · C#[重复]中的产量理解困难 8 年前 |