继续使用块

时间:2015-06-11 17:26:24

标签: vb.net

这个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 

1 个答案:

答案 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构造中使用现有对象,您只需要小心其他任何东西都不会在它被丢弃后尝试使用它。