我为什么要把物品放在包里?

sma*_*man 2 .net collections .net-4.0 bag viewbag

我刚刚看到一个关于System.Collections.ConcurrentBag<T>类的SO问题,我已经看到了ASP.NET MVC 的ViewBag属性Controller.根据我的经验,我已经了解到如果你理解他们在撰写文章时到底得到了什么,那么使用人们的代码会更容易.我认为它非常直观地表示a List<T>或a Dictionary<TKey,TValue>或a ReadOnlyCollection<T>表示什么.Bag另一方面,A 不是那么直观.

所以,我的问题是:这个比喻的意思什么Bag,特别是关于.NET框架?

Jon*_*eet 6

ConcurrentBag<T> 是一个线程安全,无序的项目序列,可以包括重复项.

所以与其他一些系列相比:

  • 它是无序的,就像一个HashSet<T>但不像一个List<T>
  • 它可以包含重复项,例如List<T>但不像aHashSet<T>
  • 它只是价值而不是地图(不像Dictionary<TKey, TValue>)
  • 与所有非并发集合不同,它是线程安全的 - 因此您可以在多个线程之间共享实例,所有线程都可以读写.

可能的用途包括您不关心排序的工作队列(否则您将使用ConcurrentQueue/ ConcurrentStack)或在将数据提取到另一个"本地"集合后始终应用排序顺序的项目列表.