Vb.net 使用Return语句与为函数赋值有什么区别吗?

Vb.net 使用Return语句与为函数赋值有什么区别吗?,vb.net,Vb.net,我只是在工作中浏览我们的代码库,试图清除编译时生成的警告,并且有大量“Function without As子句,clause”警告 返回并将其中大部分更改为Sub而不是函数,我偶尔会忽略Return语句,因为我只是突出显示方法名称并查找分配给它的值,这在大多数代码中都是这样做的 所以我只是想知道这两者之间是否有区别: Private Function Foo() As String Foo = String.Empty End Function 或: 从功能上看,它似乎是相同的,但我

我只是在工作中浏览我们的代码库,试图清除编译时生成的警告,并且有大量“Function without As子句,clause”警告

返回并将其中大部分更改为
Sub
而不是
函数
,我偶尔会忽略
Return
语句,因为我只是突出显示方法名称并查找分配给它的值,这在大多数代码中都是这样做的

所以我只是想知道这两者之间是否有区别:

Private Function Foo() As String
    Foo = String.Empty
End Function
或:


从功能上看,它似乎是相同的,但我不确定在编译器如何解释这一点方面是否有任何幕后差异。

没有显著差异

但是,我更喜欢使用
Return
,因为它在代码可读性方面更加清晰。当然这是个人喜好


它还提供了踩下另一个同名变量的可能性。

主要区别在于
Return
退出函数,而为函数名赋值则不退出。所以这两个等价物应该是

Private Function Foo() As String
    Foo = String.Empty
    Exit Function
    '.....
End Function
或:


就流控制语句而言,它们不一定完全相同,尽管给出的两个示例的行为相同

执行此操作时:

Return String.Empty
Foo = String.Empty
函数退出,函数的结果是提供的值。执行此操作时:

Return String.Empty
Foo = String.Empty
函数的结果是提供的值,但函数不退出。您可以这样做:

Foo = String.Empty
' other logic
Foo = someValue
如果函数在
其他逻辑
中的某个位置退出,例如从
退出函数
语句退出,则其结果将是
字符串。空
,因为这是最后一个设置为结果的值。如果没有,则其结果将是
someValue
,因为这将是设置为结果的最后一个值


它们用于类似的目的,从函数返回值。但是,代码的流程(以及随后的可读性)可能会因使用方式的不同而大不相同。

哦,很公平,是的。我知道
return
立即存在,我只是不确定在幕后如何处理变量或任何类似的事情。