这个continue for
命令会处置正在使用的对象吗?在这种情况下,我提到的对象是con
连接
For Each x in y
Using con As connection = createconnection()
' blah blah
If "some condition" Then
Continue For
End if
End Using
Next
答案 0 :(得分:2)
是的,它会的。 (或者至少,它确实应该。)Using
块本质上是一个Try/Finally
构造,它在Dispose()
中调用Finally
。任何时候控件离开块,它都会执行Finally
。
考虑它与此基本相同:
For Each x in y
Dim con As connection = createconnection()
Try
' blah blah
If "some condition" Then
Continue For
End if
Finally
con.Dispose()
End Try
Next
在循环再次迭代之前,控制必须离开Try
块。这会触发Finally
。
您唯一需要注意的是con
是否存在于此区块的范围之外。一个对象被释放,但是如果有东西引用它,它仍然处于处置状态存在。语言中没有任何内容可以阻止您在Using
构造中使用现有对象,您只需要小心其他任何东西都不会在它被丢弃后尝试使用它。