如何确定动态数组是否未在VBScript中标注尺寸

时间:2010-12-17 01:35:17

标签: arrays vbscript

假设我在VBScript中创建一个动态数组

Dim myArray()

稍后我如何检查这个数组从未被标注过尺寸?

Ubound(myArray) 'sub script out of range
Lbound(myArray) 'sub script out of range
IsEmpty(myArray) 'returns false

4 个答案:

答案 0 :(得分:5)

我认为没有任何内置功能,但您可以创建自己的功能:

Function IsInitialized(a)    
    Err.Clear
    On Error Resume Next
    UBound(a)
    If (Err.Number = 0) Then 
        IsInitialized = True
    End If
End Function

然后您可以将其称为:

Dim myArray()
If Not IsInitialized(myarray) Then
    WScript.Echo "Uninitialized"
End If

但是,解决它的一种方法可能是不声明空数组,而是声明一个变量并稍后将其设置为数组,因此请将上面的代码更改为:

Dim myArray
myArray = Array()
If Not IsInitialized(myarray) Then
    WScript.Echo "Uninitialized"
End If

答案 1 :(得分:0)

我更喜欢Not数组,然后将结果与-1进行比较。这样做是有效的,并且没有故意造成错误。

Dim myArray()

...

If (Not myArray) = -1 Then
    ReDim myArray(0)
Else
    ReDim Preserve(0 To UBound(myArray)+1)
End If

答案 2 :(得分:0)

我一直在使用这样的东西:

Dim arr
arr = null

sub addElement (byref arr, element)
    if isNull (arr) then
        redim arr(0)
    else
        redim preserve arr (uBound(arr) + 1)
    end if
    arr(uBound(arr)) = element
end sub

答案 3 :(得分:-1)

在寻找同一问题的答案时遇到这个问题,我将一个变量初始化为0并仅在我添加到该区域时增加它,然后只检查变量值...

昏暗的myarray() NUM = -1 如果addtoarray然后 NUM = NUM​​ + 1 redim preserve myarray(num) 万一 如果num> -1则  做一点事 结束如果