如何通过更优雅地重复 "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