【问题标题】:Why does BlockingCollection<T> not implement ICollection<T>?为什么 BlockingCollection<T> 没有实现 ICollection<T>?
【发布时间】:2015-12-12 00:52:19
【问题描述】:

当前的实现如下所示:

public class BlockingCollection<T> : IEnumerable<T>, ICollection, IEnumerable, IDisposable

有谁知道为什么它也没有实现ICollection&lt;T&gt;?有点烦人...

【问题讨论】:

  • 根据the documentation,它还实现了IReadOnlyCollection&lt;T&gt; (.net 4.5+)。
  • 该类没有密封,所以如果你真的需要它来实现,你可以手动继承和代理实现。
  • @UweKeim 当然,但我也想在收藏中添加一些项目......
  • 请记住ICollection&lt;T&gt;ICollection 非常不同。 Contains() 方法是破坏交易的 imo,对 ICollection 至关重要,但无法以有效的线程安全方式实现它。
  • 查看一个非常接近的问题“为什么 ConcurrentBag 不实现 ICollection?” stackoverflow.com/q/5611781/2680660

标签: .net concurrent-collections


【解决方案1】:

一方面它没有实现ICollection.Contains Method (T)
正如 Hans 所评论的, Contains() 方法无法以高效的线程安全方式实现。

【讨论】:

  • @HansPassant 我同意。你想让我窃取你的包含还是直接删除?
猜你喜欢
  • 2011-06-14
  • 2015-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-22
  • 2011-07-29
  • 2013-12-06
相关资源
最近更新 更多