Синтаксис: "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
