【发布时间】:2010-07-07 15:24:27
【问题描述】:
我目前正在.Net Framework 2.0 中用 C# 重写一个旧的 VB6 程序(不是我的选择,这是由公司决定的)。在大多数情况下,事情进展顺利。该程序测量来自精密磨床的输入数据,并显示图形和刻度盘以显示精度。
最初的程序员是机械工程师,但不是软件工程师。该程序可以运行,但是到处都有一些草率的代码。最值得注意的是,我遇到了一些 GoTo 语句。在必要的地方将东西放入一个循环中并从中获得相同的功能是非常容易的。
我遇到了原始代码中的一个案例,但是,看起来 GoTo 所做的不仅仅是模拟循环。它有几个不同的退出条件。它看起来像这样(不是实际的代码,只是我为了演示而编造的一些简短的东西):
VB6 代码
Public Sub Tick()
Dim condition1 As Boolean
Dim condition2 As Boolean
Dim testNumber As Integer
beginning: 'The GoTo label'
' (... Some Other Code Here ...)'
If condition1 = True Then
goto beginning
Else
' (... Do some calculation ...)'
End If
If condition2 = True Then
' (... Do some calculation ...)'
goto beginning
End If
Select Case testNumber
Case 1: '(... Some code ...)'
Case 2: '(... Some code ...)'
Case 3: '(... Some code ...)'
Case 4: goto beginning
End Select
End Sub
实际代码的条件可能比这少一些,但基本思想是有一些不同的事情会导致它自行循环。有没有一种好方法可以为这样的情况编写循环,或者这是可以接受 goto 语句的情况? (诚然,非 goto 解决方案将是首选)。
感谢您的时间和考虑。
注意:我尝试使用带中断的 while(true) 循环;声明,但它导致程序陷入无限循环并锁定。是否更建议编写一个包含多个条件(带有和/或等)的长while循环?
【问题讨论】:
-
您尝试了 while 循环,但您一定犯了一个错误,因为您不应该以无限循环结束。我可以通过一些嵌套的 while 循环看到这个功能,这很疯狂。或者“一些代码”和“计算”的东西应该移到函数中并称为 IF 条件。
-
你可能想尝试递归。