假设我有一个IEnumerable,比如一个List(TValue),并且我想跟踪这个列表是否被访问(为了防止问题发生,例如,当它在另一个线程上迭代时添加到列表中) ;我总是可以写代码如下所示:有没有办法检查IEnumerable是否使用For Each循环访问?
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并包含这样一个属性的新类似乎对我来说过分了。
谢谢!我以前不熟悉SyncLock。现在出于好奇,在这种情况下,为什么我会创建这个新的objStorageLock对象,而不是简单地编写“SyncLock List1 ... End SyncLock”? – 2009-05-19 14:01:41