VB.Net - Могу ли я проверить, является ли строка IsNumeric, и конвертирует ли она ее в число, с которым нужно сравнить, все в одном условии операторов IF? - PullRequest
0 голосов
/ 25 октября 2019

У меня есть база данных с колонкой, помеченной 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

Последнее условие оператора IF нарушается, если PrintOnPage является строкой, которую нельзя преобразовать в INT. Поскольку PrintOnPage может иметь значение LAST и iPageNo! = До последней страницы, указанной в базе данных, до тех пор, пока цикл не будет повторен до соответствующей страницы, это проблема.

Даже если значение IsNumeric равно False, вторая частьусловие после AND все еще проверяется и, таким образом, нарушается. Я пытаюсь избежать вложения во многие операторы IF, если могу.

Есть ли способ решить эту проблему в рамках одного и того же оператора IF?

1 Ответ

1 голос
/ 25 октября 2019

Вы можете использовать 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) терпит неудачу, он не будет пытаться оценить следующие части.

...