Dim logDetail = (
From d In UIDLs
Select d.EmailID
Where EmailID = UIDL
).FirstOrDefault
阻止集合是UIDL logDetail对象是否会从阻塞集合中删除?
这可能是对阻塞集合的无效使用,但UIDL就在那里,所以我可以在UIDL中对值进行并行查找。我正在考虑使用并发字典,这对我来说似乎更糟,因为我基本上只有一个对象数组而不是名称值对。
答案 0 :(得分:3)
使用此查询将使用IEnumerable接口。
阻止集合的默认GetEnumerator不会从列表中删除项目。
答案 1 :(得分:0)
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)