`exit do`同时转义嵌套循环中的两个while循环
`Exit do` escapes two while loops in nested loops at the same time
我今天早上在测试我的 ms-Access
数据库时遇到了一个有趣的问题。我尝试将一个 recordset
(RsOuter
) 中的每个值与另一个 recordset
(RsInner
) 中的每个值进行比较。我这样做的方式是,如果找到匹配的 record
,它会使用 Exit do
来逃避 RsInner
循环。这是因为一旦找到匹配的记录,就不需要遍历其余的记录。
Do while not RsOuter.EOF
Do While Not RsInner.EOF
If MatchFound Then
'do Something
Exit do ' this escapes both while loops, instead of one
End If
RsInner.MoveNext
Loop
RsInner.MoveFirst
RsOuter.MoveNext
Loop
有没有办法让它只退出其中一个循环(在本例中只退出 RsInner
)?
你错了 Exit Do
在嵌套的 Do 循环中突破了两个级别。考虑以下因素:
Sub test()
Dim i As Long, j As Long
Do While i < 2
Do While j < 2
Debug.Print "In inner loop"
If True Then Exit Do
j = j + 1
Debug.Print "This shouldn't be printed"
Loop
Debug.Print "In outer loop"
i = i + 1
Loop
Debug.Print "Out of the loops"
End Sub
输出为:
In inner loop
In outer loop
In inner loop
In outer loop
Out of the loops
如果您说的是真的,"In outer loop" 不应打印。您的代码正在发生其他事情。听起来你正在退出外循环条件为 False
的内循环
我今天早上在测试我的 ms-Access
数据库时遇到了一个有趣的问题。我尝试将一个 recordset
(RsOuter
) 中的每个值与另一个 recordset
(RsInner
) 中的每个值进行比较。我这样做的方式是,如果找到匹配的 record
,它会使用 Exit do
来逃避 RsInner
循环。这是因为一旦找到匹配的记录,就不需要遍历其余的记录。
Do while not RsOuter.EOF
Do While Not RsInner.EOF
If MatchFound Then
'do Something
Exit do ' this escapes both while loops, instead of one
End If
RsInner.MoveNext
Loop
RsInner.MoveFirst
RsOuter.MoveNext
Loop
有没有办法让它只退出其中一个循环(在本例中只退出 RsInner
)?
你错了 Exit Do
在嵌套的 Do 循环中突破了两个级别。考虑以下因素:
Sub test()
Dim i As Long, j As Long
Do While i < 2
Do While j < 2
Debug.Print "In inner loop"
If True Then Exit Do
j = j + 1
Debug.Print "This shouldn't be printed"
Loop
Debug.Print "In outer loop"
i = i + 1
Loop
Debug.Print "Out of the loops"
End Sub
输出为:
In inner loop
In outer loop
In inner loop
In outer loop
Out of the loops
如果您说的是真的,"In outer loop" 不应打印。您的代码正在发生其他事情。听起来你正在退出外循环条件为 False
的内循环