Vb.net 使用对象列表解析txt文件

Vb.net 使用对象列表解析txt文件,vb.net,parsing,streamreader,Vb.net,Parsing,Streamreader,我试图解析一个包含多个贷款的.txt文件。我的逻辑是:我用我需要的属性创建一个Loan类,我创建一个Loan对象列表。我创建一个新的贷款对象并将其添加到列表中。然后我通读txt文件并填充对象属性。当我到达文件的末尾时,我需要创建一个新的贷款对象并重新开始,因为文件中有多个贷款,并且我需要每个贷款一个对象。问题是,当我使用下面的代码时,会出现错误“局部变量'myLoans'在封闭块中隐藏变量”。有更好的方法吗 Public Class Loan Public Propert

我试图解析一个包含多个贷款的.txt文件。我的逻辑是:我用我需要的属性创建一个Loan类,我创建一个Loan对象列表。我创建一个新的贷款对象并将其添加到列表中。然后我通读txt文件并填充对象属性。当我到达文件的末尾时,我需要创建一个新的贷款对象并重新开始,因为文件中有多个贷款,并且我需要每个贷款一个对象。问题是,当我使用下面的代码时,会出现错误“局部变量'myLoans'在封闭块中隐藏变量”。有更好的方法吗

    Public Class Loan
        Public Property LoanId As String
        Public Property LoanProvider As String
    End Class

    Dim listOfLoans As New List(Of Loan)()
    Dim myLoans As New Loan
    listOfLoans.Add(myLoans)

    Dim line As String
    Using r As New StreamReader("c:text.txt")
        line = r.ReadLine()
        Do While (Not line Is Nothing)
            If (line.Substring(0, 10) = "Loan id:") Then
                myLoans.LoanId = line.Substring(10, line.Length - 10).Trim()

            ElseIf (line.Substring(0, 14) = "Loan Provider:") Then
                myLoans.LoanProvider = line.Substring(14, line.Length - 19).Trim()

            ElseIf (line.Substring(0, 30) = "Last line of file:") Then
                Dim myLoans As New Loan
                listOfLoans.Add(myLoans)

            End If
            line = r.ReadLine
        Loop
    End Using

提前谢谢

在这些行中,您正在创建类Loan的一个新实例,并将该新实例分配给一个不同的变量,该变量与外部变量同名。
当然,此变量的生存期仅限于封闭的ElseIf/End IF块,与第一个块无关。只有名称和编译器会提醒您注意陷阱

ElseIf (line.Substring(0, 30) = "Last line of file:") Then
    Dim myLoans As New Loan
    listOfLoans.Add(myLoans)
End If
你应该简单地把这一行换成另一行

ElseIf (line.Substring(0, 30) = "Last line of file:") Then
    myLoans = New Loan    'no Dim so the myLoans is the external one'
    listOfLoans.Add(myLoans)
End If

这将创建Loan类的一个新实例,并将引用分配给在开始时声明的同一个变量

如果代码是VB,则不要标记为C。我标记了C,因为C解决方案也可以工作。谢谢,你会认为这是可行的,但我现在犯了更多的错误。感谢与此更改相关的或其他类型的错误?