VB中同一变量匹配多个值的If条件如何优化
单个变量匹配多取值的If条件优化方案(VB.NET场景)
你原来的写法存在两处明显的冗余:一是重复调用dt.Rows(0).Items("Id").ToString()取值,二是并列写大量Or判断逻辑臃肿,下面是几种常用的优化方式:
方案1:数组Contains方法(最通用,适合90%的场景)
先把待判断的Id提取为变量,再把所有需要匹配的Id放在数组中,直接调用Contains方法判断:
' 先提取当前Id,避免重复取值 Dim currentId As String = dt.Rows(0).Items("Id").ToString() ' 所有需要匹配的Id集中定义在数组中 Dim matchIds As String() = {"548", "78787", "787", "11", "025", "568"} If matchIds.Contains(currentId) Then MessageBox.Show("INSIDE") End If
优势:
- 代码可读性极强,后续要新增/删除匹配值直接修改数组即可,不用调整判断逻辑
- 完全消除了重复取值的冗余操作,执行效率更高
- 逻辑清晰,不容易出现拼写错误
方案2:HashSet匹配(适合匹配值多、或需要多次判断的场景)
如果要匹配的Id数量超过20个,或者需要在多处重复做这个匹配判断,可以用HashSet存储匹配值,查找效率更高:
Imports System.Collections.Generic ' HashSet可以全局初始化一次,多次重复使用 Dim matchIdSet As New HashSet(Of String) From {"548", "78787", "787", "11", "025", "568"} Dim currentId As String = dt.Rows(0).Items("Id").ToString() If matchIdSet.Contains(currentId) Then MessageBox.Show("INSIDE") End If
优势:
- 查找时间复杂度为O(1),匹配值越多性能优势越明显,远高于数组的O(n)查找效率
- 可以全局复用,避免每次判断都重复初始化匹配集合
方案3:Select Case多值匹配(适合轻量场景)
如果你不想额外定义集合变量,也可以用VB原生的Select Case多值匹配语法:
Dim currentId As String = dt.Rows(0).Items("Id").ToString() Select Case currentId Case "548", "78787", "787", "11", "025", "568" MessageBox.Show("INSIDE") End Select
优势:
- 不需要引用额外的集合类型,语法简洁
- 适合匹配值数量少、不需要复用匹配规则的场景
内容的提问来源于stack exchange,提问作者oswald vin
相关产品推荐
相关产品推荐

