В настоящее время я переписываю старую программу VB6 на C # в .Net Framework 2.0 (не мой выбор, это было решено компанией).По большей части все прошло довольно хорошо.Программа измеряет входящие данные с точного шлифовального станка и отображает графики и шкалы для отображения точности.
Первоначально программист был инженером-механиком, однако не инженером-программистом.Программа работает, но тут и там есть немного небрежного кода.В частности, я столкнулся с несколькими утверждениями 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) с разрывом;оператора, но это привело к тому, что программа оказалась в бесконечном цикле и заблокирована.Не лучше ли написать длинный цикл, содержащий несколько условий (с и / или и т. Д.)?