d3m*_*355 1 .net vb.net return function syntax-error
我收到了错误
函数"Login"不会在所有代码路径上返回值.你错过了"退货"声明吗?
我在某种程度上理解了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
Run Code Online (Sandbox Code Playgroud)
我已经多次这样做了,据我所知,每个陈述都可以进行评估.任何人都可以提出其他建议,如果可能的话,最好有一个简短的解释,所以我理解未来?
这是因为编译器不知道您正在检查表是否有行,因此假设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
Run Code Online (Sandbox Code Playgroud)
如果您的用户名是唯一的,那么说您的功能可以更简单(更快),因为如果您找到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
Run Code Online (Sandbox Code Playgroud)