Синтаксис: "Exit Sub" или "Return" в VB.NET подпрограммы

оба " Exit Sub "или" Return", похоже, выполняют одно и то же-выходят из подпрограммы. Есть ли разница в том, как они работают под одеялом?

то есть

Private Sub exitNow()
    Exit Sub
End Sub

или

Private Sub exitNow()
    Return
End Sub

6 ответов


из документа:

в процедуре Sub или Set оператор Return эквивалентен оператору Exit Sub или Exit Property, и выражение не должно быть предоставлено.


Я предпочитаю Return над Exit Sub. Потому что время от времени ты меняешься с Sub to Function. В этом случае Exit Sub можно преобразовать в Exit Function, но это предполагает, что было предыдущее назначение имени функции (как VB 6), чего, скорее всего, не произошло. Return поймает эту ситуацию - если метод должен вернуть значение,Return без аргумента не будет сбой во время компиляции.


Если вы проверяете выходные данные IL 2 операторов, они одинаковы. Однако, поскольку "return" предназначен для того, чтобы вернуть что-то вызывающему абоненту, строго говоря, "Exit Sub" больше подходит для использования в Sub.


они одинаковы в этом контексте.

однако с точки зрения читаемости кода "Exit Sub" будет понятнее, поскольку "Return" указывает, что в качестве вывода используется какое-то значение (что не относится к подпрограммам).


хотя есть исключения, такие как предложения guard, в большинстве случаев я бы рассмотрел либо знак того, что метод слишком длинный.


Я хотел подтвердить, что они действуют одинаково и в лямбда-выражениях, и они делают:

Sub test()

    Dim a As Action = Sub() Exit Sub
    Dim b As Action = Sub() Return

    a()
    b()

    MsgBox("Yes they do!") 
 End Sub