函数“<procedurename>”不会 return 所有代码路径上的值。你在发表 'Return' 声明吗?

Function '<procedurename>' doesn't return a value on all code paths. Are you m,ssing a 'Return' statement?

考虑一下:

Private Function isAvailableQuantity() As Boolean
    Try
        sqL = "SELECT StocksOnHand FROM ITEM WHERE ItemNo = " & Val(txtSearch.Text) & ""
        ConnDB()
        cmd = New OleDbCommand(sqL, conn)
        dr = cmd.ExecuteReader(CommandBehavior.CloseConnection)


        If dr.Read = True Then

            If Val(txtQuantity.Text) <= dr(0) Then
                isAvailableQuantity = True
            Else
                MsgBox("Insuficient stocks", MsgBoxStyle.Critical, "Validate Stocks")
                txtSearch.Clear()
            End If
        End If
    Catch ex As Exception
        MsgBox(ex.Message)


    Finally
        cmd.Dispose()
        conn.Close()
    End Try

End Function

我不知道该怎么办。旧版本 visual studio 不会出现此错误。 我现在正在使用 vs 2022,它似乎有错误相反 vs 2010 没有

在 VB.NET 中,Function 是一种 return 有值的方法,而 Sub 是没有 return 值的方法.如果您的方法不需要 return 任何东西,请使用 Sub,例如

Private Sub DoSomething()
    'Do some stuff here.
End Sub

如果您确实使用 Function,那么有两种方法可以 return 一个值。不好的方法是给以方法命名的隐式局部变量赋值,例如

Private Function DoSomething() As Boolean
    'Do some stuff here.

    DoSomething = True
End Function

这种方式基本上只存在于支持升级的VB6代码。如果您的老师向您展示了这一点,那么他们显然是一位没有真正正确学习 VB.NET 的老 VB6 开发人员。 return 值的好方法是使用明确的 Return 语句,例如

Private Function DoSomething() As Boolean
    'Do some stuff here.

    Return True
End Function

如果您的代码可以通过多条路径执行,您需要确保在所有这些路径上都有一个值 returned。例如,这段代码不会这样做:

Private Function DoSomething() As Boolean
    If Date.Now.DayOfWeek = DayOfWeek.Monday Then
        Return True
    End If
End Function

星期一会 return True,但其他日子不会 return。在这种特定情况下,一种解决方法是:

Private Function DoSomething() As Boolean
    If Date.Now.DayOfWeek = DayOfWeek.Monday Then
        Return True
    End If

    Return False
End Function

如果您打算使用错误的方式 return 一个值,并且您希望 return 除了一个代码路径之外的所有特定值,那么合乎逻辑的做法是设置return 开始时的值为默认值,然后只在那个地方更改它,例如

Private Function DoSomething() As Boolean
    DoSomething = False

    If Date.Now.DayOfWeek = DayOfWeek.Monday Then
        DoSomething = True
    End If
End Function

最后一个示例是针对您的场景的最简单(尽管不是最佳)修复。