You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

VBS中用字符串变量引用数组名触发Ubound类型不匹配错误的咨询

解决VBScript中通过字符串变量引用命名数组的问题

嘿,这个问题我太熟了!你猜的没错,报错就是因为strChooseOne只是个存着数组名字的字符串,而UBound()必须接收实际的数组对象,VBScript可不会自动帮你把字符串转换成对应的变量。针对你要处理40个数组、遍历500个条目的场景,给你两个靠谱的解决方案:

方法一:用Dictionary统一管理数组(强烈推荐)

这是最安全、最易维护的方式,把所有数组都放进一个字典里,用数组名称当键,直接通过字符串就能取出对应的数组:

  1. 先创建字典并把你的数组都加进去:
Dim arrDict
Set arrDict = CreateObject("Scripting.Dictionary")

' 定义并添加你的数组
Dim arrOne, arrTwo, arrThree
arrOne = Array("word","Cat","Dog","Bob")
arrTwo = Array("apple", "banana", "cherry")
arrThree = Array("red", "green", "blue", "yellow")

arrDict.Add "arrOne", arrOne
arrDict.Add "arrTwo", arrTwo
arrDict.Add "arrThree", arrThree
' 剩下的37个数组也按这个方式添加进去就行
  1. 之后用字符串取数组、遍历就完全没问题了:
strChooseOne = "arrOne"
' 先检查一下字典里有没有这个数组名,避免报错
If arrDict.Exists(strChooseOne) Then
    Dim targetArr, I
    targetArr = arrDict(strChooseOne)
    For I = 0 To UBound(targetArr)
        ' 这里写你要执行的操作,比如打印元素
        WScript.Echo targetArr(I)
    Next
Else
    WScript.Echo "找不到对应的数组:" & strChooseOne
End If

这个方法的好处是类型安全,后续要加数组、改数组名都很方便,完全不用担心动态执行代码的风险。

方法二:用Execute动态执行代码(不推荐,谨慎使用)

如果实在不想用字典,也可以用Execute语句把字符串转换成变量,但要注意:如果strChooseOne的来源是用户输入或者不可信的内容,绝对不能用这个方法,因为它会执行任意代码,有安全隐患。代码示例:

strChooseOne = "arrOne"
Dim targetArr, I
' 动态把字符串转成数组变量
Execute "targetArr = " & strChooseOne
For I = 0 To UBound(targetArr)
    ' 执行你的操作
    WScript.Echo targetArr(I)
Next

总结一下,处理大量数组的场景,Dictionary绝对是最优解,代码可读性高,维护起来也省心。

内容的提问来源于stack exchange,提问作者MarkS

火山引擎 最新活动