Do...Loop 循环允许以比 For(专注于计数器)或 While(条件总是在入口被检查)更灵活的结束条件来组织代码块的重复。在 Visual Basic 中,主要有四种记录变体:
' 入口条件检查 Do While condition ' 循环体 Loop ' 出口条件检查 Do ' 循环体 Loop While condition ' 类似的使用 Until: Do Until condition ' 循环体 Loop Do ' 循环体 Loop Until condition
当以下情况出现时,应该使用 Do...Loop:
问题: 如果在 Do While condition 循环中,条件 condition 最初为假,会发生什么?循环体会被执行一次吗?
答案: 不,循环体不会被执行,因为检查是在第一次执行之前进行的。
示例:
Dim i As Integer = 10 Do While i < 5 Console.WriteLine(i) i += 1 Loop ' 不会输出任何行。
故事
在数据解析阶段,开发人员使用循环
Do Until reader.EndOfStream,在其中调用从文件读取字符串。但是,由于EndOfStream只有在尝试读取超出文件边界后才变为真,最后一行没有被处理。正确的方法是使用Do While Not reader.EndOfStream或逐行处理读取并根据 EOF 条件结束循环。
故事
在代码从 For 迁移到 Do...Loop 的过程中,实现了一个循环,但没有在循环体内明确递增计数变量。结果,程序进入了一个无限循环,因为结束条件永远不会到达。始终需要控制 Do...Loop 内部关键变量的变化。
故事
在一个报告子系统中,程序员使用了嵌套的
Do...Loop循环,但没有考虑内部条件Exit Do的嵌套:内部Exit Do只退出内部循环,而不是两个循环。这个短期阻塞的 bug 只在处理大量数据时在生产环境中发现。