codecamp

Visual Basic (VB) If-Else-If 语句详解

Visual Basic 中,If-Else-If 语句或条件可用于定义多个条件并根据我们的要求仅执行匹配的条件。   通常,当我们有一个条件来验证和执行所需的语句块时,Visual Basic 的 if 语句或 if-else 语句很有用。如果我们有多个条件来验证和执行一个代码块,那么 If-Else-If 语句在我们的应用程序中很有用。

If...ElseIf 的作用

当条件超过 2 个时,用 ElseIf 比多层嵌套 If...Else 更清晰易读。
语法:

If 条件1 Then
    ' 条件1 为真
ElseIf 条件2 Then
    ' 条件2 为真
[ElseIf 条件3 Then]
    ' ...
[Else
    ' 所有条件都不满足]
End If

Visual Basic If-Else-If 语句流程图

下面是流程图,表示 Visual Basic 编程语言中 If-Else-If 语句的流程。

示例:成绩等级多分支

Dim score As Integer = 83
Dim grade As String


If score >= 90 Then
    grade = "A"
ElseIf score >= 80 Then
    grade = "B"
ElseIf score >= 70 Then
    grade = "C"
ElseIf score >= 60 Then
    grade = "D"
Else
    grade = "E"
End If


Console.WriteLine($"等级:{grade}")   ' 等级:B

注意事项

  1. 顺序必须从「高」到「低」,否则逻辑会被提前拦截
  2. Else 可选,但建议保留,处理「剩余所有情况」
  3. 条件表达式必须返回 Boolean,不能写 If score Then…(VB 16 已禁止隐式转换)

与 AndAlso / OrElse 组合(推荐)

Dim score As Integer = 75
Dim absence As Integer = 1


If score >= 90 Then
    Console.WriteLine("优秀")
ElseIf score >= 80 AndAlso absence <= 2 Then
    Console.WriteLine("良好(无缺课)")
ElseIf score >= 70 AndAlso absence <= 2 Then
    Console.WriteLine("中等(无缺课)")
Else
    Console.WriteLine("需补考或缺课过多")
End If

AndAlso 短路,避免后面计算报错

对比:If...ElseIf vs 嵌套 If

写法 可读性 官方建议
If...ElseIf 条件 > 2 个时首选
嵌套 If...Else <= 2 层,或需要复杂逻辑时再考虑

嵌套示例(不推荐超过 2 层):

If score >= 60 Then
    If absence <= 2 Then
        Console.WriteLine("可考试")
    Else
        Console.WriteLine("缺课过多")
    End If
Else
    Console.WriteLine("不及格")
End If

If 三元嵌套(仅作对比)

两层以内简洁,三层以上可读性下降:

Dim level As String = If(score >= 90, "A",
                         If(score >= 80, "B",
                            If(score >= 70, "C",
                               If(score >= 60, "D", "E"))))

建议赋值/返回场景再用三元,多语句仍用 If...ElseIf

实战:个人所得税阶梯(2025 税率)

规则:

  • ≤5000 免
  • 5001-8000 部分 3%
  • 8001-12000 部分 10%
  • 12000 部分 20%

Imports System   ' 避免 CDec 报错


Module PersonalTax2025
    Sub Main()
        ' 最新起征点 5000 元 / 月(2025 政策仍延续)
        Const THRESHOLD As Decimal = 5000D
        ' 2025 年综合所得税率表(月度简化版)
        ' 月应纳税所得额 | 税率 | 速算扣除数
        ' ≤5000            0%   0
        ' 5001-8000        3%   0
        ' 8001-12000      10%   210
        ' 12001-25000     20%   1410
        ' 25001-35000     25%   2660
        ' 35001-55000     30%   4410
        ' 55001-80000     35%   7160
        ' >80000          45%   15160


        Console.Write("请输入月应纳税所得额(已减 5000 起征点):")
        Dim taxable As Decimal = Decimal.Parse(Console.ReadLine())


        Dim tax As Decimal


        If taxable <= 0 Then
            tax = 0
        ElseIf taxable <= 3000 Then          ' 5000-8000 段
            tax = taxable * 0.03D
        ElseIf taxable <= 12000 Then         ' 8001-17000 段
            tax = taxable * 0.1D - 210D
        ElseIf taxable <= 25000 Then         ' 17001-30000 段
            tax = taxable * 0.2D - 1410D
        ElseIf taxable <= 35000 Then         ' 30001-40000 段
            tax = taxable * 0.25D - 2660D
        ElseIf taxable <= 55000 Then         ' 40001-60000 段
            tax = taxable * 0.3D - 4410D
        ElseIf taxable <= 80000 Then         ' 60001-85000 段
            tax = taxable * 0.35D - 7160D
        Else
            tax = taxable * 0.45D - 15160D
        End If


        Console.WriteLine($"月度个人所得税:{tax:C}")
        Console.ReadKey()
    End Sub
End Module

运行示例

请输入月应纳税所得额(已减 5000 起征点):2500
月度个人所得税:¥75.00

VS2026 常见报错信息

错误代码 提示文本 原因
BC30035 语法错误,ElseIf 后缺少 Then 复制网页时全角空格 / 中文括号混用
BC30451 未声明元素 CDec 项目以 Option Strict On 创建,未导入 System
BC30201 表达式应为 Boolean 条件里用了 = 全角符号

常见坑速查(VS2026 新编译器更严格)

坑点 正确写法 错误示例
全角符号 <= <=
中文括号 (taxable * 0.1D - 210D) (taxable * 0.1D - 210D)
未导入 System 代码顶部加 Imports System 直接使用 CDec 报错
Option Strict On 小数常量加 D / Decimal.Parse Dim tax = 0 导致类型推断失败

注意:VS2026 默认 Option Strict On + Option Explicit On,必须显式导入、显式类型转换

最佳实践

  1. 条件顺序:从高优先级写到低优先级
  2. Else 必须处理「剩余全部」,避免漏分支
  3. 复杂条件抽成函数,主流程保持简洁
  4. 注释写「为什么」而不是「是什么」
  5. >3 个分支且为离散值时,考虑 Select Case

9. 小结口诀

If...ElseIf 像楼梯,

从高到低依次去;

Else 兜底别忘记,

复杂条件抽方法!

Visual Basic (VB) If Else 语句详解
Visual Basic (VB) 嵌套 If...Else 语句详解
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }