コレクションを使用するたびにメソッドを呼び出すことにより、どのようなコードが効果的にやっていることは次のとおりです。
For i As Integer = 0 To csB.Count - 1
Dim cc As Collection(Of Reports_ucColumn)
If csB(i).Contains("Invalid") Or csB(i).Contains("Duplicate") Then
cc = New Collection(Of Reports_ucColumn)
cc.Add(Me.ucColumn0)
cc.Add(Me.ucColumn1)
cc.Add(Me.ucColumn2)
cc.Item(i).isValid = False
cc = New Collection(Of Reports_ucColumn)
cc.Add(Me.ucColumn0)
cc.Add(Me.ucColumn1)
cc.Add(Me.ucColumn2)
cc.Item(i).title = csB(i)
If csB(i).Contains("Invalid") Then
cc = New Collection(Of Reports_ucColumn)
cc.Add(Me.ucColumn0)
cc.Add(Me.ucColumn1)
cc.Add(Me.ucColumn2)
cc.Item(i).errCode = "005W"
Else
cc = New Collection(Of Reports_ucColumn)
cc.Add(Me.ucColumn0)
cc.Add(Me.ucColumn1)
cc.Add(Me.ucColumn2)
cc.Item(i).errCode = "005W" 'todo - chg this once we get a duplicate col err code
End If
Else
cc = New Collection(Of Reports_ucColumn)
cc.Add(Me.ucColumn0)
cc.Add(Me.ucColumn1)
cc.Add(Me.ucColumn2)
cc.Item(i).isValid = True
cc = New Collection(Of Reports_ucColumn)
cc.Add(Me.ucColumn0)
cc.Add(Me.ucColumn1)
cc.Add(Me.ucColumn2)
cc.Item(i).title = csB(i)
cc = New Collection(Of Reports_ucColumn)
cc.Add(Me.ucColumn0)
cc.Add(Me.ucColumn1)
cc.Add(Me.ucColumn2)
cc.Item(i).errCode = String.Empty
End If
Next
ますでしょうあなたは、そのようなコードを書くことはありませんでしょうか?
この機能を遅延初期化のプロパティに変更することができます。コレクションは、一度だけ作成されるよう、それは、何度も繰り返し、それを使用しても大丈夫です。
Private _cc As Collection(Of Reports_ucColumn)
Private Property CcB As Collection(Of Reports_ucColumn)
Get
If _cc Is Nothing Then
_cc = New Collection(Of Reports_ucColumn)
_cc.Add(Me.ucColumn0)
_cc.Add(Me.ucColumn1)
_cc.Add(Me.ucColumn2)
End If
Return _cc
End Get
End Property
(理想的にはプロパティは、クラスと_cc
変数で、パブリックでなければなりませんprivateである必要があり、唯一のように、クラスの中にカプセル化プロパティはそれにアクセスすることができます)。
意味的にはこれもうまくいきます。関数は一般的には少し作業を行います。結果を何度も使用したい場合は、関数を何度も呼び出すべきではありません。一方、プロパティは通常、多くの作業をしません。結果に何らかの処理を作成する必要がある場合、プロパティは通常、作業が必要以上に実行されていないことを確認するために、遅延初期化や事前初期化のような処理を行います。
クール。入力とアドバイスをありがとうございました。 – aape