VB.NET函数 - 返回与赋值

时间:2011-09-28 01:26:20

标签: vb.net function

这两种在VB.NET中返回值的方法有什么区别?

使用退货声明:

Public Function Foo() As String
    Return "Hello World"
End Function

使用作业:

Public Function Foo() As String
    Foo = "Hello World"
End Function

我正在使用第一个然后我看到有人使用第二个。我想知道使用第二种方法是否有好处。

5 个答案:

答案 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块中,但你可以在那里指定函数的值。