语法:VB.NET 子程序中的“Exit Sub”或“Return”
Posted
技术标签:
【中文标题】语法:VB.NET 子程序中的“Exit Sub”或“Return”【英文标题】:Syntax: "Exit Sub" or "Return" in VB.NET subroutines 【发布时间】:2010-11-03 12:42:39 【问题描述】:“退出子程序”或“返回”似乎都完成了同样的事情——退出子程序。它们在幕后的工作方式有什么不同吗?
也就是说,
Private Sub exitNow()
Exit Sub
End Sub
或
Private Sub exitNow()
Return
End Sub
【问题讨论】:
【参考方案1】:来自文档:
在 Sub 或 Set 过程中,Return 语句等同于 Exit Sub 或 Exit Property 语句,不得提供表达式。
所以在这种情况下它们是相同的。
(Return (<value>)
用于函数和 property.get 中。显然在这种情况下略有不同)。
【讨论】:
【参考方案2】:比起Exit Sub
,我更喜欢Return
。因为有时您会从Sub
更改为Function
。在这种情况下,Exit Sub
可以转换为Exit Function
,但这假设函数名称之前有一个分配(类似于 VB 6),这很可能没有发生。 Return
会捕捉到这种情况 - 如果方法应该返回一个值,没有参数的 Return
将在编译时失败。
【讨论】:
很好的洞察力。谢谢迈克!【参考方案3】:如果您检查 2 条语句的 IL 输出,它们是相同的。但是,由于 'return' 是为了将某些东西推回给调用者,所以严格来说,'Exit Sub' 更适合在 Sub 中使用。
【讨论】:
其实return有两层意思。对于函数,这意味着将某些内容返回给调用者,而在函数和 subs 中,这意味着将执行返回到调用位置。在大多数带有“return”关键字的语言中都是这种情况。 “Exit Sub”仅用于向后兼容 pre-.NET VB。 我不同意“'Exit Sub'更适合在Sub中使用。”Exit Sub
没有错,但是它特定于视觉基础; return
用于退出受C
启发的所有语言的子程序:C#
、java
、C++
、Objective-C
。
@ToolmakerSteve 我同意“'Exit Sub' 更适合在 Sub 中使用,因为我们使用的是 VB.Net 语言,而且这种语言比其他语言更加用户友好,所以 Exist sub 是最好的选择return 因为您可以检查其他关键字,例如 IF END IF 等。希望您理解我的意思。【参考方案4】:
在这种情况下它们是相同的。
但是,从代码可读性的角度来看,“Exit Sub”会更清晰,因为“Return”表示某些值正在用作输出(子例程不是这种情况)。
【讨论】:
这应该是评论,而不是答案。 我不同意 "'"Exit Sub" 会更清楚.."Exit Sub
没有任何问题,但是它是特定于 Visual Basic 的; return
用于退出受C
启发的所有语言的子程序:C#
、java
、C++
、Objective-C
。投了反对票,因为这与两年前的 chikani's answer 说的一样,所以没有增加讨论。【参考方案5】:
首先,Procedures 带有 sub,我们应该知道我们正在处理不返回特定值的特定程序,具有传递某些特定参数甚至不传递任何参数的能力。如:
打印一些东西()。
计算整数CalcFact(X)
的阶乘。
为特定任务执行一些流程。
函数是一个特定的过程,通过传递一些特定的参数来实现特定的任务,它必须返回一些可以用来完成整个任务的值,例如验证用户名和用户通过。
总之 Sub 不返回值,我们直接调用它 "Print HelloWorld()"
,而函数这样做:
ValidUsersNameAndPass("Johne","jOhNe13042019")
' 这可以返回一个布尔值。
ValidUsersNameAndPass("Johne","jOhNe13042019");
// 这可能会返回一个布尔值。
【讨论】:
【参考方案6】:我想确认它们在 lambda 表达式中的行为也是一样的,它们确实如此:
Sub test()
Dim a As Action = Sub() Exit Sub
Dim b As Action = Sub() Return
a()
b()
MsgBox("Yes they do!")
End Sub
【讨论】:
这是什么?这似乎是个笑话 @CengizAraz 因为这看起来不像可以编译的真实代码? msdn.microsoft.com/en-us/library/bb531253.aspx @Patrick 在 VS 2015 中推断的类型是匿名委托,但我不确定与 Action 是否有任何区别。 这段代码没有增加讨论。你认为它表明了什么?【参考方案7】:虽然有像保护子句这样的例外,但在大多数情况下,我会考虑方法太长的迹象。
【讨论】:
我认为这两种方法在递归中都非常有用。 这不是问题的答案。以上是关于语法:VB.NET 子程序中的“Exit Sub”或“Return”的主要内容,如果未能解决你的问题,请参考以下文章
vb.net中如何用事件和委托,会C#中的事件和委托,但不知VB.net中的语法,望给个简单的例子熟悉语法。
在 sql 语法中出现错误,vb.net 中的 mysql update 语句