函数不会在所有代码路径上返回值

时间:2017-09-28 08:55:09

标签: vb.net

我收到了警告:"函数没有在所有代码路径上返回值"对于以下代码:

Function Test() As Boolean

    Dim X As Integer = 5

    If X = 10 Then
        Return True
    End If

End Function

我知道我不会在所有代码路径中返回值,因为If语句需要X = 10才能访问Return。但由于创建函数时的默认值为False,因此我希望在条件未填充时返回。所以现实中的函数确实会在所有代码路径上返回一个值。

我认为依赖函数的默认值是一种不好的做法,特别是因为创建函数是为了首先返回一个值。有人可以阐明这个话题并帮助解决我的困惑吗?

我可以通过将代码更改为:

来删除警告
Function Test() As Boolean

    Dim X As Integer = 5

    If X = 10 Then
        Return True
    Else
        Return False
    End If

End Function

或者

Function Test() As Boolean

    Dim X As Integer = 5

    Return (X = 10)

End Function

1 个答案:

答案 0 :(得分:1)

  

因为创建函数时的默认值是False,我希望如此   标准未填写时要返回的内容

不,这是一个错误的期望。 .NET不这样做的原因显而易见: 这是一种防止你疏忽犯错的方法。通常,您只是忽略了您的代码路径没有返回值,因此如果该方法假定您想要返回False,那么它将隐藏错误。

因此它迫使您自己提供返回值。

在VB.NET中,您也可以使用Exit Function,然后返回该类型的默认值。

MSDN

  

如果您使用Exit Function而没有为名称分配值,则   procedure返回指定的数据类型的默认值   在返回类型。如果未指定returntype,则返回该过程   没什么,这是Object的默认值。

但在我看来,这是不好的做法,只有与VB6向下兼容。

还有另一种方法可以在不返回任何内容的情况下保留函数:如果抛出异常。

所以警告是告诉你应该重新考虑你的逻辑的一种方式,它只是提醒你,你可能忘记了一个案例。最后的Return something最终不会伤到你:

Function Test() As Boolean
    Dim X As Integer = 5

    If X = 10 Then Return True

    Return False   
End Function