是否返回Nothing或者根本不返回任何内容

时间:2014-06-05 15:08:42

标签: vb.net visual-studio-2010 visual-studio

最初不返回值的函数应该返回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

4 个答案:

答案 0 :(得分:2)

  

此示例代码是否应该返回Nothing或者不需要它?

因为它永远不会返回值,所以它应该是SubFunction向读者暗示返回一个值,因此您的函数看起来像现在一样错误,让每个必须维护它的人感到困惑。

从技术上讲,如果没有明确的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