Продолжить цикл

37

У меня есть следующий код

For x = LBound(arr) To UBound(arr)

    sname = arr(x)  
    If instr(sname, "Configuration item") Then  
        '**(here i want to go to next x in loop and not complete the code below)**  

    '// other code to copy past and do various stuff

Next x  

Итак, я думал, что могу просто иметь оператор Then Next x, но это дает ошибку "no for statement announce".

Итак, что я могу поставить после If instr(sname, "Configuration item") Then, чтобы перейти к следующему значению для x?

  • 0
    Спасибо людям, которые исправляют мою орфографию, я знаю, что я отстой, и благодарен, что люди нашли время, чтобы помочь мне с этим. ура
Теги:
for-loop
loops
next

6 ответов

28
Лучший ответ

Вы не можете использовать Next. Вы могли бы добиться чего-то вроде того, что вы пытаетесь сделать, используя инструкцию GoTo, но действительно, GoTo следует зарезервировать для случаев, когда альтернативы надуманны и непрактичны.

В вашем случае есть действительно простая, чистая и читаемая альтернатива:

    If Not InStr(sname, "Configuration item") Then
        '// other code to copy past and do various stuff
    End If
  • 7
    Это менее чистый и читаемый, когда у вас есть несколько условий, как на протяжении всего цикла. Поскольку код становится все более глубоким, он требует больше свободного пространства для кодера, пытающегося его прочитать. По этой причине GoTo может быть лучше здесь, и ответ Арлена Бейлера является еще одним достойным решением.
  • 1
    Я согласен, это были бы лучшие ответы - на другой вопрос. Не к этому.
Показать ещё 3 комментария
65

Вы можете использовать GoTo:

Do

    '... do stuff your loop will be doing

    ' skip to the end of the loop if necessary:
    If <condition-to-go-to-next-iteration> Then GoTo ContinueLoop 

    '... do other stuff if the condition is not met

ContinueLoop:
Loop
11

Много лет спустя... Мне нравится этот:

For x = LBound(arr) To UBound(arr): Do

    sname = arr(x)  
    If instr(sname, "Configuration item") Then Exit Do 

    '// other code to copy past and do various stuff

Loop While False: Next x
9
For i=1 To 10
    Do 
        'Do everything in here and

        If I_Dont_Want_Finish_This_Loop Then
            Exit Do
        End If 

        'Of course, if I do want to finish it,
        'I put more stuff here, and then...

    Loop While False 'quit after one loop
Next i
  • 0
    Похоже, это самый лучший способ отказаться от использования Goto для продолжения циклов For, которые я видел. Я полагаю, что вы могли бы применить тот же подход, чтобы избежать Гото и в других обстоятельствах, в этом отношении ...
  • 0
    Хороший ответ. Ответ Альфредо Йонга - та же идея, но компактность ответа Альфредо делает его более читабельным для меня.
Показать ещё 1 комментарий
4

Несколько лет спустя, но вот еще одна альтернатива.

For x = LBound(arr) To UBound(arr)
    sname = arr(x)  
    If InStr(sname, "Configuration item") Then  
        'Do nothing here, which automatically go to the next iteration
    Else
        'Code to perform the required action
    End If
Next x
  • 2
    да, но это стандартный выбор для рассматриваемой проблемы, вызывающей уродливое вложение, если это более одного условия continue
0

Я иногда делаю двойной цикл:

Do

    Do

        If I_Don't_Want_to_Finish_This_Loop Then Exit Do

        Exit Do

    Loop

Loop Until Done

Это позволяет избежать "goto spaghetti"

Ещё вопросы

Сообщество Overcoder
Наверх
Меню