这两种在VB.NET中返回值的方法有什么区别?
使用退货声明:
Public Function Foo() As String
Return "Hello World"
End Function
使用作业:
Public Function Foo() As String
Foo = "Hello World"
End Function
我正在使用第一个然后我看到有人使用第二个。我想知道使用第二种方法是否有好处。
答案 0 :(得分:11)
它是遗留下来的遗产。
Return
将立即离开范围,而分配则不会。
答案 1 :(得分:5)
这样想:
Public Function Foo() As String
Foo = "Hello World"
OtherFunctionWithSideEffect()
End Function
Public Function Foo() As String
Return "Hello World"
OtherFunctionWithSideEffect()
End Function
现在你能看出区别吗?
在实践中,现代VB.Net几乎总是更喜欢后一种风格(Return)。
答案 2 :(得分:5)
在LinqPad中测试:
Public Function myString() As String
Return "Hello World"
End Function
Public Function myString2() As String
myString2 = "Hello World"
End Function
这是IL输出:
myString:
IL_0000: ldstr "Hello World"
IL_0005: ret
myString2:
IL_0000: ldstr "Hello World"
IL_0005: stloc.0
IL_0006: ldloc.0
IL_0007: ret
所以在某种意义上,IL会增加两行,但我认为这是一个很小的差异。
答案 3 :(得分:3)
两者都有效但使用Return
保存必须添加Exit Function
,如果您想要返回函数的一部分,那么它更可取:
If param.length=0 then
Msgbox "Invalid parameter length"
Return Nothing
End If
与:比较:
If param.length=0 then
Msgbox "Invalid parameter length"
Foo = Nothing
Exit Function
End If
此外,如果你使用Return
,如果你决定更改你的功能名称,你不必记得右键单击重命名将所有Foo实例重命名为FooNew。
答案 4 :(得分:1)
除了其他答案之外,还有一个区别,如下:
Public Function Test() As Integer
Try
Dim retVal as Integer = 0
retVal = DoSomethingExceptional()
Catch ex as Exception ' bad practice, I know
Finally
Test = retVal
End Try
End Function
你不能把一个Return放在Finally块中,但你可以在那里指定函数的值。