如何确定在VB6中数组是否已初始化?

63

在VB6中,如果向未定义维数的数组传递到Ubound函数会导致错误,因此在尝试检查其上限之前,我希望检查它是否已被定义维度。如何实现这一点?

24个回答

0

这两种方法都可以有效地检测未初始化的数组,但必须包括括号:

(Not myArray) = -1
(Not Not myArray) = 0

-1

我在网上看到了很多关于如何判断数组是否已初始化的建议。下面是一个函数,它将接受任何数组,检查该数组的ubound是什么,重新调整数组为ubound +1(带或不带PRESERVER),然后返回数组的当前ubound而不出现错误。

Function ifuncRedimUbound(ByRef byrefArr, Optional bPreserve As Boolean)
On Error GoTo err:

1: Dim upp%:           upp% = (UBound(byrefArr) + 1)

errContinue:

If bPreserve Then
         ReDim Preserve byrefArr(upp%)
Else
         ReDim byrefArr(upp%)
End If

ifuncRedimUbound = upp%


Exit Function
err:
If err.Number = 0 Then Resume Next
    If err.Number = 9 Then ' subscript out of range (array has not been initialized yet)
             If Erl = 1 Then
                         upp% = 0
                         GoTo errContinue:
             End If
    Else
               ErrHandler.ReportError "modArray", ifuncRedimUbound, "1", err.Number, err.Description
    End If
End Function

-2

这对我有用,里面有任何错误吗?

If IsEmpty(a) Then
    Exit Function
End If

MSDN

程序设计相关的内容

2
不,这里没有错误。它只是无用的。“IsEmpty仅对_variants_返回有意义的信息。” - raven
感谢您的澄清,Raven。我想知道为什么非变量没有类似的方法。 - madhu_p

-8
Dim someArray() as Integer    

If someArray Is Nothing Then
    Debug.print "this array is not initialised"
End If

5
你在考虑使用VB.NET吗?也许你想删除这个回答,Andrew。 - MarkJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接