Visual Basic .NET Language
условия
Поиск…
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
Если оператор
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
без оценки первого выражения.
Старые версии VB не имеют оператора If()
и должны работать с встроенной функцией IIf()
. Поскольку это функция, а не оператор, она не замыкается; все выражения оцениваются со всеми возможными побочными эффектами, включая штрафы за производительность, изменение состояния и исключение бросания. (Оба вышеупомянутых примера, которые избегают исключений, будут бросать, если преобразовать их в IIf
.) Если какой-либо из этих побочных эффектов представляет проблему, нет возможности использовать встроенный условный; вместо этого полагайтесь на If..Then
блоки, как обычно.