异常代码处理vb.net

时间:2016-08-18 23:45:15

标签: vb.net

我正在尝试从CSV文件中获取我之前尝试过的行,直到现在才出现在新项目中:

我在结构列表中添加每行(文件夹数组()和其他3个变量

问题是当我使用list.add()第一次正常工作但是当从arraycurrentrow()访问文件夹数据时第二行它正在更新列表中的前一项甚至代码没有到达list.add()部分!!!!

注意:这只发生在数组部分,但结构中的其他3个变量没有问题

注意:我为另一个项目使用相同的代码,但结构没有任何数组?那么为什么Folders()数组中的问题

我整天都没有希望!如果您对此问题有任何想法

    Public Structure DataBaseStrc
        Public Property Folders As String()
        Public Property TagName As String
        Public Property SAPFL As String
        Public Property SAPEqNO As String
    End Structure






Shared Function MarafiqsDataBase_CSV()
        Dim ioReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(DataBaseInserter.DatabaseCSVPathText.Text)
        ioReader.TextFieldType = FileIO.FieldType.Delimited
        ioReader.SetDelimiters(",")

        Dim tempList As New List(Of DataBaseStrc)
        Dim ReadingIndex As Integer
        Dim StrcCurrentRow As DataBaseStrc = Nothing
        Integer.TryParse(DataBaseInserter.MaxFoldersNoCB.Text, MaxFolderNo)
        ReDim StrcCurrentRow.Folders(MaxFolderNo - 1)

        While (Not ioReader.EndOfData)
            Dim arrCurrentRow As String() = ioReader.ReadFields()
            If arrCurrentRow.Length = 12 Then
                Dim FolderIndex As Integer = 0
                For FolderIndex = 0 To MaxFolderNo - 1
                    StrcCurrentRow.Folders(FolderIndex) = arrCurrentRow(FolderIndex)
                Next
                StrcCurrentRow.TagName = arrCurrentRow(FolderIndex)
                StrcCurrentRow.SAPFL = arrCurrentRow(FolderIndex + 1)
                StrcCurrentRow.SAPEqNO = arrCurrentRow(FolderIndex + 2)
                tempList.Add(StrcCurrentRow)
            Else
Error handling
            End If

        End While
        PublicDatabaseList = tempList
        Return Nothing

    End Function

2 个答案:

答案 0 :(得分:1)

问题似乎是你只创建了一个String数组,因此你每次都要覆盖相同的元素。在循环内部,您应该创建一个新数组并填充它:

StrcCurrentRow.Folders = New String(MaxFolderNo - 1) {}

For FolderIndex = 0 To MaxFolderNo - 1
    StrcCurrentRow.Folders(FolderIndex) = arrCurrentRow(FolderIndex)
Next

你也可以摆脱循环外的ReDim

说了这么多之后,我将这种类型从一个结构改为一个类,只让每次创建自己的数组,或者甚至使用一个集合。

答案 1 :(得分:0)

移动此行:

Dim StrcCurrentRow As DataBaseStrc = Nothing

在while循环中开始。 您不是每次都设置它,因此只有一个对象,并且每次循环都会不断更新它。