Как я могу определить, не был ли размер динамического массива в VBScript? - PullRequest
6 голосов
/ 17 декабря 2010

Скажем, я создаю динамический массив в VBScript

Dim myArray()

Позже, как я могу проверить, что этот массив никогда не был измерен?

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

Ответы [ 4 ]

5 голосов
/ 17 декабря 2010

Не думаю, что что-то встроено, но вы можете создать свою собственную функцию как:

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
0 голосов
/ 13 апреля 2015

Наткнулся на это, ища ответ на тот же вопрос, я инициализировал переменную равной 0 и увеличивал ее только тогда, когда добавляю в область, а затем просто проверяю значение переменной вместо этого ...

dim myarray () Num = -1 если addtoarray то Num = Num + 1 Redim Preserve Myarray (число) конец, если если num> -1, то сделай что-нибудь конец если

0 голосов
/ 29 августа 2013

Я использовал что-то вроде этого:

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
0 голосов
/ 24 мая 2013

Я предпочитаю Not Массив, а затем сравниваю результат с -1.Это работает, и делает это без преднамеренной ошибки.

Dim myArray()

...

If (Not myArray) = -1 Then
    ReDim myArray(0)
Else
    ReDim Preserve(0 To UBound(myArray)+1)
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...