List(TValue) などの IEnumerable があり、このリストがアクセスされているかどうかを追跡したいとします (別のスレッドで反復されている間にリストに追加するなどの問題を防ぐため)。次のようなコードをいつでも書くことができます。
Dim List1 As New List(Of Integer)
Dim IteratingList1 As Boolean = False
' ... some code ... '
Private Function getSumOfPositivesFromList1() As Integer
If IteratingList1 Then Return -1
IteratingList1 = True
Dim SumOfPositives As Integer = 0
For Each x As Integer In List1
If x > 0 Then SumOfPositives += x
Next
IteratingList1 = False
Return SumOfPositives
End Function
(このコードは非常に恣意的なものですが、私が話していることを示しています。)
私の質問は、上記のようにブール値を手動で更新してアクセスするよりも、このチェックを実行するためのより良い/よりクリーンな方法があるかどうかです。あるに違いないと思いますが、私の知る限り、組み込みの「反復処理中」メソッドまたはプロパティを持つ IEnumerable クラスはありません。そして、IEnumerable を実装し、そのようなプロパティを含む新しいクラスを作成することは、やり過ぎのように思えます。