Visual Basic如何执行所有ElseIf分支 同时实现全条件不成立时报错
Visual Basic多条件全匹配执行解决方案
原生ElseIf语法属于短路判断逻辑,命中第一个符合条件的分支后就会终止后续判断,无法直接修改为执行所有符合条件的分支,可使用以下两种方案实现需求:
方案1:独立If + 匹配标志位(改造成本最低,适合绝大多数场景)
新增一个布尔变量记录是否有任意条件命中,拆分所有判断为独立If语句,最后统一判断是否需要输出错误提示:
' 初始化匹配标志,默认无任何条件命中 Dim hasMatched As Boolean = False If boolean_expression1 Then ' 原表达式1对应的业务逻辑 hasMatched = True End If If boolean_expression2 Then ' 原表达式2对应的业务逻辑 hasMatched = True End If If boolean_expression3 Then ' 原表达式3对应的业务逻辑 hasMatched = True End If ' 所有条件判断完成后,统一处理全假场景 If Not hasMatched Then ' 输出统一错误提示 End If
方案2:条件-动作委托列表(适合条件多、需频繁扩展的场景)
将所有条件和对应执行逻辑封装为委托列表,遍历执行所有符合条件的逻辑:
' 定义条件与对应执行逻辑的集合 Dim conditionActions As New List(Of (Condition As Func(Of Boolean), Action As Action)) From { (Function() boolean_expression1, Sub() ' 表达式1对应的业务逻辑 End Sub), (Function() boolean_expression2, Sub() ' 表达式2对应的业务逻辑 End Sub), (Function() boolean_expression3, Sub() ' 表达式3对应的业务逻辑 End Sub) } Dim hasMatched As Boolean = False ' 遍历执行所有符合条件的逻辑 For Each item In conditionActions If item.Condition() Then item.Action() hasMatched = True End If Next If Not hasMatched Then ' 输出统一错误提示 End If
注意:如果使用的VB版本不支持值元组,可将集合替换为
List(Of Tuple(Of Func(Of Boolean), Action)),初始化时使用Tuple.Create创建元素即可。
内容的提问来源于stack exchange,提问作者user17242718
相关产品推荐
相关产品推荐

