我有一个数据库,其中的列标记为PrintOnPage。它可以保存值“ ALL”,“ LAST”或特定的页码(1、2、3等),它们都存储为字符串。
在我的代码中,我有以下IF语句:
If ((PrintOnPage.ToUpper = "ALL") OrElse
(PrintOnPage.ToUpper = "LAST" And iPageNo = (_indexDatabase.GetField("LastPage").Trim) OrElse
(IsNumeric(PrintOnPage) And CInt(PrintOnPage) = iPageNo)) Then
如果PrintOnPage是无法转换为INT的字符串,则IF语句的最后一个条件将中断。因为PrintOnPage可以是LAST,而iPageNo!=可以是数据库中指定的最后一页,直到将其循环到正确的页面为止,这是一个问题。
即使IsNumeric为False,仍然会检查AND之后条件的第二部分,因此会中断。如果可以的话,我试图避免嵌套到许多IF语句。
在相同的IF语句中是否有解决此问题的方法?
您可以使用AndAlso
来缩短If
评估,就像您正在使用OrElse
:
If ((PrintOnPage.ToUpper = "ALL") OrElse
(PrintOnPage.ToUpper = "LAST" AndAlso iPageNo = (_indexDatabase.GetField("LastPage").Trim) OrElse
(IsNumeric(PrintOnPage) AndAlso CInt(PrintOnPage) = iPageNo)) Then
这样,如果第一部分IsNumeric(PrintOnPage)
失败,它将不会尝试评估以下部分。