If...Then...Else 语句 (Visual Basic)

根据表达式的值有条件地执行一组语句。

语法

' Multiline syntax:
If condition [ Then ]
    [ statements ]
[ ElseIf elseifcondition [ Then ]
    [ elseifstatements ] ]
[ Else
    [ elsestatements ] ]
End If

' Single-line syntax:
If condition Then [ statements ] [ Else [ elsestatements ] ]

本文包括几个示例,说明了 If...Then...Else 语句的用法:

组成部分

condition
必需。 表达式。 计算结果必须为 TrueFalse,或者计算结果为可隐式转换为 Boolean 的数据类型。

如果表达式是一个 NullableBoolean 变量,其计算结果为 Nothing,则条件被视为表达式为 False,并且计算 ElseIf 块(如果它们存在),或者执行 Else 块(如果它存在)。

Then
在单行语法中是必需的;在多行语法中是可选的。

statements
可选。 后面If的一个或多个语句 ...如果计算结果为True,则执行。 conditionThen

elseifcondition
如果存在 ElseIf,则为必需。 表达式。 计算结果必须为 TrueFalse,或者计算结果为可隐式转换为 Boolean 的数据类型。

elseifstatements
可选。 后面ElseIf的一个或多个语句 ...如果计算结果为True,则执行。 elseifconditionThen

elsestatements
可选。 如果先前的 conditionelseifcondition 表达式没有被计算为 True,则执行一个或多个语句。

End If
终止 If...Then...Else 块的多行版本。

注解

多行语法

当遇到 If...Then...Else 语句时,会测试 condition。 如果 conditionTrue,则执行 Then 后面的语句。 如果 conditionFalse,则按顺序计算每个 ElseIf 语句(如果有)。 找到 Trueelseifcondition 时,将执行紧跟在关联的 ElseIf 之后的语句。 如果没有 elseifcondition 计算为 True,或者如果没有 ElseIf 语句,则执行 Else 后面的语句。 在执行 ThenElseIfElse 后面的语句后,继续执行 End If 后面的语句。

ElseIfElse 子句都是可选的。 可以在 If...Then...Else 语句中包含任意数量的 ElseIf 子句,但 ElseIf 子句不能出现在 Else 子句之后。 If...Then...Else 语句可以相互嵌套。

在多行语法中,If 语句必须是第一行的唯一语句。 ElseIfElseEnd If 语句前面只能有一个行标签。 If...Then...Else 块必须以 End If 语句结尾。

提示

当你计算具有几个可能值的单个表达式时,Select...Case 语句可能更有用。

单行语法

可以将单行语法用于单个条件,并在符合条件时执行代码。 但是,多行语法提供了更多的结构和灵活性,并且更易于读取、维护和调试。

检查 Then 关键字后面的内容以确定语句是否为单行 If。 如果在同一行的 Then 后面出现除注释以外的任何内容,则该语句被视为单行 If 语句。 如果 Then 不存在,则它必须是多行 If...Then...Else 的开头。

在单行语法中,可以执行多个语句作为 If...Then 决策的结果。 所有语句必须位于同一行,并且用冒号分隔。

多行语法示例

下面的示例说明了 If...Then...Else 语句的多行语法的用法。

'Create a Random object to seed our starting value 
Dim randomizer As New Random()
'set our variable
Dim count As Integer = randomizer.Next(0, 5)

Dim message As String

'If count is zero, output will be no items
If count = 0 Then
    message = "There are no items."
    'If count is 1, output will be "There is 1 item.".        
ElseIf count = 1 Then
    message = "There is 1 item."
    'If count is greater than 1, output will be "There are {count} items.", where {count} is replaced by the value of count. 
Else
    message = $"There are {count} items."
End If

Console.WriteLine(message)

'This example displays output like the following:
' There are 4 items.

嵌套语法示例

下面的示例包含嵌套的 If...Then...Else 语句。

Public Sub Main()
    ' Run the function as part of the WriteLine output.
    Console.WriteLine("Time Check is " & CheckIfTime() & ".")
End Sub

Private Function CheckIfTime() As Boolean
    ' Determine the current day of week and hour of day.
    Dim dayW As DayOfWeek = DateTime.Now.DayOfWeek
    Dim hour As Integer = DateTime.Now.Hour

    ' Return True if Wednesday from 2 to 3:59 P.M.,
    ' or if Thursday from noon to 12:59 P.M.
    If dayW = DayOfWeek.Wednesday Then
        If hour = 14 Or hour = 15 Then
            Return True
        Else
            Return False
        End If
    ElseIf dayW = DayOfWeek.Thursday Then
        If hour = 12 Then
            Return True
        Else
            Return False
        End If
    Else
        Return False
    End If
End Function

'This example displays output like the following:
'Time Check is False.

单行语法示例

下面的示例说明了单行语法的用法。

Private Sub SingleLine()

    'Create a Random object to seed our starting values 
    Dim randomizer As New Random()

    Dim A As Integer = randomizer.Next(10, 20)
    Dim B As Integer = randomizer.Next(0, 20)
    Dim C As Integer = randomizer.Next(0, 5)

    'Let's display the initial values for comparison
    Console.WriteLine($"A value before If: {A}")
    Console.WriteLine($"B value before If: {B}")
    Console.WriteLine($"C value before If: {C}")

    ' If A > 10, execute the three colon-separated statements in the order
    ' that they appear
    If A > 10 Then A = A + 1 : B = B + A : C = C + B

    'If the condition is true, the values will be different
    Console.WriteLine($"A value after If: {A}")
    Console.WriteLine($"B value after If: {B}")
    Console.WriteLine($"C value after If: {C}")

End Sub

'This example displays output like the following:
'A value before If: 11
'B value before If: 6
'C value before If: 3
'A value after If: 12
'B value after If: 18
'C value after If: 21

另请参阅