VB 陣列宣告的迷思

VB 陣列宣告的迷思

debug過程中,記錄一下:

因程式需求,有一段code在迴圈裏宣告字串陣列,陣列的資料來源是某一段判斷為TRUE時才會去拆解字串,就因為如此,產生了一些迷思,就我寫程式的經驗,在迴圈裏宣告的變數為區域變數,所以迴圈跑下一個時,理應變數會重新Dim ,可是陣列卻不會,造成程式誤判,話不多說直接看程式:

一、程式尚未修正之前:

邏輯是當 i 為偶數時,重新取陣列

 


	Sub Main()
        '字串的資料來源
        Dim tmpChr As String = ""
        For i As Integer = 1 To 10
            '字串陣列
            Dim a As String()
            '字串變數
            Dim b As String = ""
            tmpChr &= i & ","
            'ReDim a(0)
            If i Mod 2 = 0 Then
                a = tmpChr.Split(",")
            End If

            If a Is Nothing OrElse a.Length <= 0 Then
                Console.WriteLine("找不到資料!!")
            Else
                Console.WriteLine(tmpChr)
            End If

        Next
        Console.ReadKey()
    End Sub

 

當遇到第一個偶數時,會進去拆解字串,此時陣列為3

image

執行到下一個 i 為單數時,因為陣列不會重新宣告,所以當程式跑到 If a Is Nothing OrElse 時會造成我程式的誤判:

image

二、程式修正後:

就我這個程式需求而言,只要多加一段 ReDim 就可解決了:

 


	Sub Main()
        '字串的資料來源
        Dim tmpChr As String = ""
        For i As Integer = 1 To 10
            '字串陣列
            Dim a As String()
            '字串變數
            Dim b As String = ""
            tmpChr &= i & ","
            '每次重新定義陣列的大小
            ReDim a(0)
            If i Mod 2 = 0 Then
                a = tmpChr.Split(",")
            End If

            If a Is Nothing OrElse a.Length <= 0 Then
                Console.WriteLine("找不到資料!!")
            Else
                Console.WriteLine(tmpChr)
            End If

        Next
    
        Console.ReadKey()
    End Sub

若有任何問題或錯誤,歡迎各位大大的指教,謝謝。

 

 

 

後記‧會發生上述的情況,最主要是對陣列這種型態不熟,附上MSDN對陣列的說明:

Visual Basic 中的陣列

分享