最初不返回值的函数应该返回Nothing
(因为Visual Studio会在End Function
语句中显示绿色波形,询问您是否忘记返回值),或者我可以忽略VS'小费?返回Nothing
或其他任何内容会产生什么影响?
tl; dr:此示例代码是否应返回Nothing
或不需要?我们非常欢迎Elucidations!
Public Shared sCaminhoGravacaoXML As String = "C:\XMLData\"
Public Shared Function VerificaPastasXML()
If Not IsNothing(sCaminhoGravacaoXML) And sCaminhoGravacaoXML <> "" Then
Dim sRaiz As String = sCaminhoGravacaoXML
If Not FileIO.FileSystem.DirectoryExists(sRaiz) Then
FileIO.FileSystem.CreateDirectory(sRaiz)
End If
If Not Directory.Exists(sRaiz & "tempXML") Then
Dim diInfo As DirectoryInfo = Directory.CreateDirectory(sRaiz & "tempXML")
diInfo.Attributes = FileAttributes.Directory Or FileAttributes.Hidden
End If
Else
sErroBaixaXML = "Não foi possível montar a estrutura de pastas para os arquivos" & vbCrLf & "XML de NFe, favor consultar os parâmetros da filial!"
End If
End Function
答案 0 :(得分:2)
此示例代码是否应该返回Nothing或者不需要它?
因为它永远不会返回值,所以它应该是Sub
。 Function
向读者暗示返回一个值,因此您的函数看起来像现在一样错误,让每个必须维护它的人感到困惑。
从技术上讲,如果没有明确的Function
语句,return
会自动返回返回数据类型的默认值。因此,您的函数(隐式声明返回类型为Object
)¹将返回Nothing
;返回类型为Integer
的函数将返回0
等。
由于忘记返回值是导致错误的常见原因,因此警告可以帮助您。如果您希望返回默认值,最好使用明确的return
语句来清除它。
¹请考虑激活Option Strict
以避免此类隐式声明。
答案 1 :(得分:0)
vb.net中的函数必须返回与subs相比没有返回值的东西。如果您不想返回值,只需将其从“功能”更改为“子”。
答案 2 :(得分:0)
如果你没有返回一个值,这实际上是VB.NET - 考虑使用Sub而不是Function,这意味着你没有返回一个值。
但是,在大多数其他语言中,不返回任何内容都可以,因为该函数将返回null / Nothing on the own。
此外,一些代码分析工具将始终以某种方式返回语句,因此一些开发人员更愿意为了可读性而明确说明。
答案 3 :(得分:0)
Public Shared Function VerificaPastasXML() As Boolean
和
If String.IsNullOrEmpty(sCaminhoGravacaoXML) Then Return False
Try
' ... doSomething (technically you should handle exceptions separately, or check for return values instead.
Return True
Catch ex As Exception
sErroBaixaXML = "Não foi possível montar a estrutura de pastas para os arquivos" & vbCrLf & "XML de NFe, favor consultar os parâmetros da filial!"
Return False
End Try
如果操作成功或失败,您应该返回一些通知调用过程的内容。
但是,创建文件夹/文件的逻辑需要一些工作。 ie:If Not VerificaPastasXML() Then : MsgBox("the operation failed") : Else : doSomething() : End If
。