语法:VB.NET子例程中的“Exit Sub”或“Return”

问题描述 投票:53回答:7

“Exit Sub”或“Return”似乎都完成了同样的事情 - 退出子程序。他们的工作方式有何不同?

那是,

Private Sub exitNow()
    Exit Sub
End Sub

要么

Private Sub exitNow()
    Return
End Sub
vb.net syntax return subroutine
7个回答
64
投票

来自doc:

在Sub或Set过程中,Return语句等效于Exit Sub或Exit Property语句,并且不能提供表达式。

所以他们在这种情况下是一样的。


14
投票

我倾向于选择Return而不是Exit Sub。因为偶尔你会从Sub变成Function。在这种情况下,Exit Sub可以转换为Exit Function,但这假设之前有一个函数名称的赋值(类似VB 6),这很可能没有发生。 Return会捕获这种情况 - 如果方法应该返回一个值,那么没有参数的Return将在编译时失败。


6
投票

如果检查2个语句的IL输出,它们是相同的。但是,由于'return'用于将某些东西推回给调用者,所以严格来说,'Exit Sub'更适合在Sub中使用。


4
投票

在这种情况下它们是相同的。

但是,从代码可读性的角度来看,“Exit Sub”会更清晰,因为“Return”表示某些值被用作输出(这与子例程不同)。


1
投票
  • 首先,程序带有sub,我们应该知道我们正在处理特定的程序,这些程序没有返回特定的值,能够传递一些特定的参数,甚至不传递任何参数。如:
  • 打印东西()。
  • 计算整数CalcFact(X)的阶乘。
  • 为特定任务执行某些过程。
  • 函数是一个特定的过程,通过传递一些特定的参数来编程实现特定任务,并且它必须返回一些可用于完成整个任务的值,例如验证用户名和用户传递。

简而言之,Sub不返回值,我们直接称之为"Print HelloWorld()",而函数则如下:

  • ValidUsersNameAndPass("Johne","jOhNe13042019")'这可能会返回一个布尔值。
  • ValidUsersNameAndPass("Johne","jOhNe13042019"); //这可能会返回一个布尔值。

-1
投票

虽然有像保护条款这样的例外,但在大多数情况下,我会考虑这个方法太长的迹象。


-1
投票

我想确认它们在lambda表达式中的行为是一样的,并且它们确实:

Sub test()

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

    a()
    b()

    MsgBox("Yes they do!") 
 End Sub
© www.soinside.com 2019 - 2024. All rights reserved.