首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FirstOrDefault是否会从BlockingCollection中删除该值

FirstOrDefault是否会从BlockingCollection中删除该值
EN

Stack Overflow用户
提问于 2012-11-14 01:15:25
回答 2查看 535关注 0票数 0
代码语言:javascript
复制
    Dim logDetail = (
        From d In UIDLs
        Select d.EmailID
        Where EmailID = UIDL
    ).FirstOrDefault

阻塞集合是UIDL。

logDetail对象会从阻塞集合中移除吗?

这可能是对阻塞集合的无效使用,但是UIDL就在那里,所以我可以对UIDL中的值进行并行查找。我正在考虑使用并发字典,这对我来说似乎更糟,因为我基本上只有一个对象数组,而不是名称值对。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-14 01:57:38

使用此查询将利用IEnumerable接口。

阻塞集合的默认GetEnumerator不会从列表中删除项。

BlockingCollection.IEnumerable.GetEnumerator Method

票数 3
EN

Stack Overflow用户

发布于 2012-11-14 03:25:46

FirstOrDefault()不会从集合中删除任何项。如果您使用GetConsumingEnumerable(),那么FirstOrDefault()将从集合中删除一项,但也会删除它之前的所有项,这不是您想要的。

您说您只有一个“字符串数组”,但是您的代码说明了另一件事:您有一个对象集合,并且您希望根据该对象的某些属性在该集合中执行查找。如果是这样的话,ConcurrentDictionary应该能很好地满足您的需求。有了它,你的代码看起来就像这样:

代码语言:javascript
复制
' 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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13365420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档