是否可以使用GoTo?

KCh*_*oux 2 c# vb6 label goto

我目前正在.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
Run Code Online (Sandbox Code Playgroud)

实际的代码可能有一些不那么多的条件,但基本的想法是有一些不同的东西导致它循环回自身.是否有一种很好的方法可以为这种情况编写一个循环,或者这是一个goto语句可以接受的情况?(不可否认,非goto解决方案将是首选).

感谢您的时间和考虑.

注意:我尝试使用while(true)循环中断; 声明,但它导致程序陷入无限循环并锁定.是否会建议写一个包含几个条件(带和/或等)的长时间循环?

Jon*_*eet 6

一个while(true)循环应该没问题,如果你在它的末尾和continue之前有goto的地方有一个中断.然而,这绝对应该只是第一步 - 听起来像是需要一个强有力的重构.