只是想知道这个循环每次都会覆盖数组

时间:2012-01-24 14:33:51

标签: .net vb.net

 While Not sr.EndOfStream
        line = sr.ReadLine
        If line.Contains("Year") Then
            currentYear = line.ToString
        ElseIf line.Contains("mandatory") Then
            moduleStats = "M"
        ElseIf line.Contains("optional") Then
            moduleStats = "O"
        ElseIf line.Contains("COM") Then
            modArray = line.Split(",")
            Dim i As Integer = modArray.Length
            ReDim Preserve modArray(modArray.Length + 1) 'ReDim statement to change the size of one or more dimensions of an array, 
            'Preserve you can resize that dimension and still preserve all the contents of the array

            modArray(i) = moduleStats
            modArray(i + 1) = currentYear.ToString()

            String.Join(",", modArray)
            MsgBox(String.Join(",", modArray))
        End If

    End While

我在最后检查了数组的内容,它只保存了文本文件中的最后一条记录,这表明它正在覆盖数组,我该如何防止这种情况?

3 个答案:

答案 0 :(得分:2)

我不确定你要做什么,但是如果你试图将所有输入保存到单个字符串或数组中,那么你的方法就不行了。你每次都要覆盖数组。使用StringBuilder,这样您就可以不断为字符串添加字符,而无需反复ReDim相同的数组。

编辑:正如@TimSchmelter建议的那样,您也可以使用List<string>来保持输入。

答案 1 :(得分:2)

在上面的第10行,您将modArray设置为该行的逗号描述内容。这当然会消除以前的所有内容。

将其重命名为lineArray。在第12行,切换到使用不同的数组来构建列表行值。或者更好的是List(Of String),因此您不必继续添加数组的大小。

答案 2 :(得分:0)

为什么你不只是像这样创建你的字符串,而不是拆分然后再加入?

line = line & "," & moduleStats & "," & currentYear 

然后你会使用字符串列表

Dim lines = new List(Of String)

While Not sr.EndOfStream  
    ' Get the information as you have shown above
    lines.Add(line)
End While