如何通过更优雅地重复 "If Not Cancel then" 来编码检查
How can I code checks with repeating "If Not Cancel then" more elegantly
在 MS Access VBA 中,我使用不同的参数在不同的方法中进行不同的检查。一旦其中之一失败,Cancel 将设置为 True,并且不应执行进一步的检查。看起来像这样:
Cancel = checkMethodOne(param1)
If Not Cancel Then
Cancel = checkMethodTwo(param2, param3)
End If
If Not Cancel Then
Cancel = checkMethodThree(param4)
End If
...等等。有没有一种方法可以在不重复 "If Not Cancel Then" 子句的情况下更优雅地编码?
像 "While Not Cancel" 这样的东西似乎是个问题,因为具有不同名称和参数的方法不同。有什么想法吗?
您可以只使用 And
来评估多个语句,如果有 return false return false:
Cancel = checkMethodOne(param1) And checkMethodTwo(param2, param3) And checkMethodThree(param4)
如果这对您方便,则视情况而定。它更短,代码更像高尔夫球,但可能更令人困惑。
请注意,这会评估所有函数,因此如果它们是性能密集型的,它可能 运行 会长一点
或者,您可以尝试以下 Select case
以避免执行所有比较:
Cancel = True
Select Case True
Case checkMethodOne(param1)
Case checkMethodTwo(param2, param3)
Case checkMethodThree(param4)
Case Else
Cancel = False
End Select
您也可以使用简单的 If-ElseIf 块:
If checkMethodOne(param1) Then
Cancel = True
ElseIf checkMethodTwo(param2, param3) Then
Cancel = True
ElseIf checkMethodThree(param4) Then
Cancel = True
End If
选择:
Cancel = True
If checkMethodOne(param1) Then
ElseIf checkMethodTwo(param2, param3) Then
ElseIf checkMethodThree(param4) Then
Else
Cancel = False
End If
在 MS Access VBA 中,我使用不同的参数在不同的方法中进行不同的检查。一旦其中之一失败,Cancel 将设置为 True,并且不应执行进一步的检查。看起来像这样:
Cancel = checkMethodOne(param1)
If Not Cancel Then
Cancel = checkMethodTwo(param2, param3)
End If
If Not Cancel Then
Cancel = checkMethodThree(param4)
End If
...等等。有没有一种方法可以在不重复 "If Not Cancel Then" 子句的情况下更优雅地编码?
像 "While Not Cancel" 这样的东西似乎是个问题,因为具有不同名称和参数的方法不同。有什么想法吗?
您可以只使用 And
来评估多个语句,如果有 return false return false:
Cancel = checkMethodOne(param1) And checkMethodTwo(param2, param3) And checkMethodThree(param4)
如果这对您方便,则视情况而定。它更短,代码更像高尔夫球,但可能更令人困惑。
请注意,这会评估所有函数,因此如果它们是性能密集型的,它可能 运行 会长一点
或者,您可以尝试以下 Select case
以避免执行所有比较:
Cancel = True
Select Case True
Case checkMethodOne(param1)
Case checkMethodTwo(param2, param3)
Case checkMethodThree(param4)
Case Else
Cancel = False
End Select
您也可以使用简单的 If-ElseIf 块:
If checkMethodOne(param1) Then
Cancel = True
ElseIf checkMethodTwo(param2, param3) Then
Cancel = True
ElseIf checkMethodThree(param4) Then
Cancel = True
End If
选择:
Cancel = True
If checkMethodOne(param1) Then
ElseIf checkMethodTwo(param2, param3) Then
ElseIf checkMethodThree(param4) Then
Else
Cancel = False
End If