使用正确的集合类型

时间:2011-05-17 18:23:48

标签: c#-4.0

我正在寻找涵盖以下要求的原生自定义类型

  • 仅包含HashSet<T>
  • 等唯一对象的通用集合
  • 它实现了INotifyCollectionChanged
  • 它实现IENumerable<T>(duh)并且必须由ReadOnlyCollection<T>(duh,duh)包装
  • 它应该与小数量和大数量项目一起使用(可能会改变内部行为?)
  • 该类型的签名必须类似UniqueList<T>(如列表,而不是键/值对)
  • 必须是可排序的。
  • 可搜索性是“必须”。

这样做的主要目的是在相关对象之间建立一个小的网格/网络。 因此,这个网络只能是唯一的对象,并且必须有一种机制,当集合中的更改发生时通知应用程序。因为它是用于概念验证,所以范围纯粹在程序集内(没有db或fs是任何重要性)。

什么是适当的原生类型,或者创建复合的最佳成分是什么?

1 个答案:

答案 0 :(得分:3)

听起来你可以非常轻松地将HashSet<T>包裹在你自己的类型中,只是为了实现INotifyCollectionChanged。您可以轻松代理所需的一切 - 例如GetEnumerator可以调用set.GetEnumerator()等。实现INotifyCollectionChanged只需要在添加或删除元素时引发事件。如果添加已存在的元素或删除不是已存在的元素,您可能希望确保不引发事件。 HashSet<T>.Add/Remove bool都会返回UniqueList<T>来帮助您解决此问题。

不会将其称为ObservableSet<T>,因为这表明类似列表的行为,例如维护排序。我称之为{{1}}或类似的东西。