[英]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.