解決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

文章標籤
全站熱搜
創作者介紹
創作者 GPhettoH 的頭像
GPhettoH

歇息,等待明日的天空

GPhettoH 發表在 痞客邦 留言(0) 人氣(54)