Предположим, у меня есть IEnumerable, например List (TValue), и я хочу отслеживать доступ к этому списку (чтобы избежать проблем, скажем, с добавлением в список, пока он повторяется в другом потоке ); Я всегда могу написать такой код:
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 и содержит такое свойство, кажется мне излишним.