Dim logDetail = (
From d In UIDLs
Select d.EmailID
Where EmailID = UIDL
).FirstOrDefault阻塞集合是UIDL。
logDetail对象会从阻塞集合中移除吗?
这可能是对阻塞集合的无效使用,但是UIDL就在那里,所以我可以对UIDL中的值进行并行查找。我正在考虑使用并发字典,这对我来说似乎更糟,因为我基本上只有一个对象数组,而不是名称值对。
发布于 2012-11-14 01:57:38
使用此查询将利用IEnumerable接口。
阻塞集合的默认GetEnumerator不会从列表中删除项。
BlockingCollection.IEnumerable.GetEnumerator Method
发布于 2012-11-14 03:25:46
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)https://stackoverflow.com/questions/13365420
复制相似问题