解決Array 不是陣列的諸多問題
在Visual Basic 裡被宣告為Array 的變數是不被當做陣列的,你可能覺得很可笑,因為這就好像說「This is an apple, 但是這不是蘋果。」一樣蠢,如果是這樣,我只能說,我同意。
確實,這個問題帶來許多麻煩。其中最麻煩的就是不能使用ReDim。因此我們創造了一個函式ResDim 用來彌補這個問題。ResDim(陣列, 索引, 指令, 是否留值)。其中指令是可選填參數,如果填入1,則會在索引上加上該陣列的最大索引,如果填入-1 則會在索引上加上該陣列的最小索引。
]Function ResDim(ByVal Origin As Object(), Optional ByVal Index As Integer = 0, Optional ByVal Command As Short = 0, Optional ByVal ToPreserve As Boolean = True) As Array
]If Not (Origin Is Nothing) Then
]Select Case Command
]Case 1
]Index += UBound(Origin)
]Case -1
]Index += LBound(Origin)
]End Select
]End If
]If (ToPreserve) Then
]ReDim Preserve Origin(Index)
]Else
]ReDim Origin(Index)
]End If
]Return Origin
]End Function
]
]Dim test As Array
]test = ResDim(test, 0) //此行第二個"test" 會出現警告"變數 'test' 已經在指派前使用,可能會發生Null 例外狀況",這是正常的,只要寫手頭腦清楚就不會有問題。
如果要在被宣告為Array 的陣列裡新增一個項目可使用函式ResPush(陣列, 新增值, 位置)。其中"位置" 是用來描述該新項目被放在哪裡,為可選項目。
]Function ResPush(ByVal Origin As Object(), ByVal Addition As Object, Optional ByVal Index As Integer = -1) As Array
]If (Origin Is Nothing) Then
]ReDim Origin(0)
]Index = 0
]Else
]ReDim Preserve Origin(UBound(Origin) + 1)
]If (Index = -1) Then
]Index = UBound(Origin)
]End If
]End If
]For i1 As Integer = Index + 1 To UBound(Origin) Step 1
]Origin(i1) = Origin(i1 - 1)
]Next
]Origin(Index) = Addition
]Return Origin
]End Function
