gpt4 book ai didi

vb.net - 有没有一种方法可以检查是否使用For Each循环访问IEnumerable?

转载 作者:行者123 更新时间:2023-12-03 13:16:29 25 4
gpt4 key购买 nike

假设我有一个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

(我意识到这段代码是很随意的,但是它说明了我在说什么。)

我的问题是,与上述手动更新和访问 bool 值相比,是否有更好/更干净的方法来执行此检查。我觉得一定有,但是据我所知,没有任何IEnumerable类带有内置的“我正在遍历”方法或属性。对我来说,编写一个实现IEnumerable并包含此类属性的新类似乎太过分了。

最佳答案

Afaik,在VB.NET中,可以在访问对象时使用SyncLock在对象周围放置锁,以防止其他线程同时对其进行处理。

Public Shared objStorageLock As New Object

Private Function getSumOfPositivesFromList1() As Integer

Dim SumOfPositives As Integer = 0

SyncLock objStorageLock

For Each x As Integer In List1
If x > 0 Then SumOfPositives += x
Next

End SyncLock

Return SumOfPositives
End Function

关于vb.net - 有没有一种方法可以检查是否使用For Each循环访问IEnumerable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/882766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com