簡體   English   中英

我在哪里缺少此VB.NET函數中的“返回”語句?

[英]Where am I missing a 'Return' statement in this VB.NET function?

我收到錯誤

函數“登錄”並非在所有代碼路徑上都返回值。 您是否缺少“退貨”聲明?

通過查看有關Stack Overflow的各種問題,我在一定程度上了解了這一點。 我的困惑是我對所有代碼路徑都有返回值-是嗎?

Public Function Login(Username As String, Password As Integer) As Integer

    Dim tableAdapter As New AcquisitionPortalDataSetTableAdapters.ITVF_LoginLogoutTableAdapter
    Dim dt As DataTable = tableAdapter.GetData(Username, Convert.ToInt32(Password))

    Try
        If dt IsNot Nothing AndAlso dt.Rows.Count > 0 Then
            For Each dr In dt.Rows
                If dr("LAN").ToString = Username AndAlso Convert.ToInt32(dr("Code")) = Password Then
                    GlobalVariables.iUserType = Convert.ToInt32(dr("Code"))
                    GlobalVariables.iUserID = Convert.ToInt32(dr("ID"))
                    Return 1
                Else
                    Return 0
                End If
            Next
        Else
            Return 0
        End If
    Catch
        Return 0
    End Try

End Function

我已經看了很多遍了,據我所知,每個語句都可以進行評估。 任何人都可以提出其他建議,最好在可能的情況下進行簡要說明,以便我對未來有所了解?

這是因為編譯器不知道您正在檢查表是否包含行,因此假定您的代碼路徑可能未輸入For Each循環。 實際上,實際上並不需要先檢查行數,因為如果其中沒有行,則“ For Each循環的迭代次數為零。

要解決該警告,您需要明確地涵蓋這種可能性:

Public Function Login(Username As String, Password As Integer) As Integer

    Dim tableAdapter As New AcquisitionPortalDataSetTableAdapters.ITVF_LoginLogoutTableAdapter
    Dim dt As DataTable = tableAdapter.GetData(Username, Convert.ToInt32(Password))

    Try
        If dt IsNot Nothing AndAlso dt.Rows.Count > 0 Then
            For Each dr In dt.Rows
                If dr("LAN").ToString = Username AndAlso Convert.ToInt32(dr("Code")) = Password Then
                    GlobalVariables.iUserType = Convert.ToInt32(dr("Code"))
                    GlobalVariables.iUserID = Convert.ToInt32(dr("ID"))
                    Return 1
                Else
                    Return 0
                End If
            Next
            Return 0 'return here when there are no rows in the datatable
        Else
            Return 0
        End If
    Catch
        Return 0
    End Try

End Function

話雖如此,如果您的用戶名是唯一的,則可以使您的功能變得更加簡單(快捷),因為如果您找到了usernme,就不必再檢查了:

Public Function Login(Username As String, Password As Integer) As Integer

    Dim tableAdapter As New AcquisitionPortalDataSetTableAdapters.ITVF_LoginLogoutTableAdapter
    Dim dt As DataTable = tableAdapter.GetData(Username, Convert.ToInt32(Password))
    If dt Is Nothing Then Return 0

    For Each dr As DataRow In dt.Rows
        If dr.Field(Of String)("LAN") = Username Then
            'we found the username now check the password
            Return If(dr.Field(Of Int32)("Code") = Password, 1, 0)
        End If
    Next

    'we didn't find a matching username
    Return 0

End Function

您能否在End Try之后僅放一個return語句? 並在保存結果的函數開頭創建一個變量? 在函數的末尾,只需返回該結果即可。

我不熟悉VB.NET,但這可以解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM