在Visual Basic中的嵌套IF

问题描述

我想制作一个程序 “如果贷款符合条件, 收入超过30,000,在公司工作2年以上或在公司工作5年以上。 和年龄在30-50岁之间。

但是不起作用

If sngSalary > 30000 Then
    If sngAge < 50 Then
        If sngYear > 5 Then
            lblMessage.Text = "Application qualifies"
        Else
            lblMessage.Text = "Application does not qualifies"
        End If
    Else
         If sngYear >= 2 Then
            lblMessage.Text = "Application qualifies"
         Else
            lblMessage.Text = "Application does not qualifies"
         End If
    End If
Else
    If sngAge > 30 Then
         If sngYear > 5 Then
             lblMessage.Text = "Application qualifies"
         Else
             lblMessage.Text = "Application does not qualifies"
         End If
    Else
         If sngYear >= 2 Then
             lblMessage.Text = "Application qualifies"
         Else
             lblMessage.Text = "Application does not qualifies"
         End If
    End If
End If

解决方法

只需按照描述中所说的完全将其编码:

Private Sub Test()
   If (sngSalary > 30000 And sngYear > 2) Or (sngYear > 5 And sngAge >= 30 And sngAge <= 50) Then
      lblMessage.Text = "Application qualifies"
   Else
      lblMessage.Text = "Application does not qualifies"
   End If
End Sub
,

通常可以通过将代码移至函数并修改逻辑来简化复杂的逻辑,以便在不满足条件的情况下尽早离开函数。在编写此类函数时,我尝试将逻辑限制为简单的是/否门。

OP对所需条件的表达非常混乱,因此下面的代码可能不正确,但确实说明了原理。

Option Explicit

Public Function IsEligible(ByVal ipSalary As Long,ByVal ipAge As Long,ByVal ipEmploymentTime As Long) As String

    IsEligible = "Application does not qualify"
    If ipEmployment < 2 Then Exit Function
    
    If ipSalary < 30000
    
        If ipEmploymentTime < 5 Then Exit Function
        If ipAge < 30 Then Exit Function
        If ipAge > 50 Then Exit Function
    
    End If
    
    IsEligible = "Application qualifies"
    
End Function