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
執行到下一個 i 為單數時,因為陣列不會重新宣告,所以當程式跑到 If a Is Nothing OrElse 時會造成我程式的誤判:
二、程式修正後:
就我這個程式需求而言,只要多加一段 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對陣列的說明: