Dim logDetail = (
From d In UIDLs
Select d.EmailID
Where EmailID = UIDL
).FirstOrDefault
阻塞集合是 UIDL。
logDetail 对象会从阻塞集合中取出吗?
这可能是对阻塞集合的无效使用,但 UIDL 就在那里,所以我可以并行查找 UIDL 中的值。我正在考虑使用并发字典,这对我来说似乎更糟,因为我基本上只有一个对象数组而不是名称值对。
Dim logDetail = (
From d In UIDLs
Select d.EmailID
Where EmailID = UIDL
).FirstOrDefault
阻塞集合是 UIDL。
logDetail 对象会从阻塞集合中取出吗?
这可能是对阻塞集合的无效使用,但 UIDL 就在那里,所以我可以并行查找 UIDL 中的值。我正在考虑使用并发字典,这对我来说似乎更糟,因为我基本上只有一个对象数组而不是名称值对。
使用此查询将利用 IEnumerable 接口。
阻塞集合的默认 GetEnumerator 不会从列表中删除项目。
FirstOrDefault()
不会从集合中删除任何项目。如果您使用GetConsumingEnumerable()
,那么FirstOrDefault()
将从集合中删除一个项目,以及它之前的所有项目,这不是您想要的。
您说您只有一个“字符串数组”,但您的代码说明了其他内容:您有一个对象集合,并且您希望根据该对象的某些属性在该集合中执行查找。如果是这种情况,ConcurrentDictionary
应该很好地满足您的需求。有了它,您的代码将类似于:
' add item to the dictionary
Dim logDetails = New ConcurrentDictionary(Of String, LogDetail)
Dim d = …
logDetails.TryAdd(d.EmailID, d)
…
' try remove item from the dictionary
Dim emailID = …
Dim removed = logDetails.TryRemove(emailID, d)