假设我有一个 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 并包含这样一个属性的新类对我来说似乎有点矫枉过正。