1

複数のローンが含まれる .txt ファイルを解析しようとしています。私のロジックは次のとおりです。必要なプロパティを持つローン クラスを作成し、ローン オブジェクトのリストを作成します。新しいローン オブジェクトを作成し、リストに追加します。次に、txt ファイルを読み、オブジェクトのプロパティを入力します。ファイルの最後に到達したら、新しい融資オブジェクトを作成して最初からやり直す必要があります。ファイルには複数の融資が含まれており、融資ごとに 1 つのオブジェクトが必要だからです。問題は、以下のコードを使用すると、「ローカル変数 '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

前もって感謝します!

4

1 に答える 1

0

これらの行では、クラス 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 クラスの新しいインスタンスが作成され、最初に宣言された同じ変数への参照が割り当てられます。

于 2013-04-19T20:23:11.147 に答える