我有这个代码
订单类型 = 10
但它仍然进入第一个 IF 块,但它不应该。
OrderType_ID = ViewState("v_OrderTypeID")
If OrderType_ID <> 7 & OrderType_ID <> 8 & OrderType_ID <> 9 & OrderType_ID <> 10 Then
If OrderType_ID = 1 & OrderType_ID = 2 & OrderType_ID = 3 Then
GenerateInvoiceNo_DebitCreditNote(False) '' Credit note
ElseIf OrderType_ID = 4 & OrderType_ID = 5 & OrderType_ID = 6 Then
GenerateInvoiceNo_DebitCreditNote(True) '' Debit note
End If
Else
GenerateInvoiceAndDocNumber()
End If
答案 0 :(得分:1)
要修复您拥有的代码,它应该是这样的:
OrderType_ID = ViewState("v_OrderTypeID")
If OrderType_ID <> 7 AndAlso
OrderType_ID <> 8 AndAlso
OrderType_ID <> 9 AndAlso
OrderType_ID <> 10 Then
If OrderType_ID = 1 OrElse
OrderType_ID = 2 OrElse
OrderType_ID = 3 Then
GenerateInvoiceNo_DebitCreditNote(False) '' Credit note
ElseIf OrderType_ID = 4 OrElse
OrderType_ID = 5 OrElse
OrderType_ID = 6 Then
GenerateInvoiceNo_DebitCreditNote(True) '' Debit note
End If
Else
GenerateInvoiceAndDocNumber()
End If
请注意,您不仅没有使用实际的布尔运算符,而且还尝试在需要布尔 AND
运算符的地方使用布尔 OR
运算符。 OrderType_ID
怎么可能同时等于 1、2 和 3?
也就是说,有一个更好的方法。执行此操作的“正确”方法是使用 Select Case
语句:
Select Case OrderType_ID
Case 1 To 3
GenerateInvoiceNo_DebitCreditNote(False)
Case 4 To 6
GenerateInvoiceNo_DebitCreditNote(True)
Case 7 To 10
GenerateInvoiceAndDocNumber()
End Select
如果 OrderType_ID
不可能是 1 到 10 以外的值,或者您也想对其他值做同样的事情,那么您不必明确说明最后一种情况:>
Select Case OrderType_ID
Case 1 To 3
GenerateInvoiceNo_DebitCreditNote(False)
Case 4 To 6
GenerateInvoiceNo_DebitCreditNote(True)
Case Else
GenerateInvoiceAndDocNumber()
End Select