我收到了警告:"函数没有在所有代码路径上返回值"对于以下代码:
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
答案 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