Поиск…


IF ... Then ... Else

Dim count As Integer = 0
Dim message As String

If count = 0 Then
    message = "There are no items."
ElseIf count = 1 Then
    message = "There is 1 item."
Else
    message = "There are " & count & " items."
End If

Если оператор

9,0
If(condition > value, "True", "False")

Мы можем использовать оператор If вместо If ... Then ... Else..End If .

Рассмотрим следующий пример:

If 10 > 9 Then
     MsgBox("True")
Else
     MsgBox("False")
End If

такой же как

MsgBox(If(10 > 9, "True", "False"))

If() использует оценку короткого замыкания , это означает, что он будет оценивать только аргументы, которые он использует. Если условие ложно (или Nullable - Nothing ), первая альтернатива вообще не будет оцениваться, и ни один из ее побочных эффектов не будет наблюдаться. Это фактически то же самое, что и тернарный оператор C # в виде condition?a:b .

Это особенно полезно для исключения исключений:

Dim z As Integer = If(x = 0, 0, y/x)

Мы все знаем, что деление на ноль вызовет исключение, но If() здесь защищает это от короткого замыкания только выражением, которое условие уже обеспечило.

Другой пример:

Dim varDate as DateTime = If(varString <> "N/A", Convert.ToDateTime(varString), Now.Date)

Если varString <> "N/A" принимает значение False , то будет назначать varDate значения «ы как Now.Date без оценки первого выражения.

9,0

Старые версии VB не имеют оператора If() и должны работать с встроенной функцией IIf() . Поскольку это функция, а не оператор, она не замыкается; все выражения оцениваются со всеми возможными побочными эффектами, включая штрафы за производительность, изменение состояния и исключение бросания. (Оба вышеупомянутых примера, которые избегают исключений, будут бросать, если преобразовать их в IIf .) Если какой-либо из этих побочных эффектов представляет проблему, нет возможности использовать встроенный условный; вместо этого полагайтесь на If..Then блоки, как обычно.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow