Использование правильного типа коллекции - PullRequest
1 голос
/ 17 мая 2011

Я ищу собственный или пользовательский тип , который удовлетворяет следующим требованиям:

  • A Универсальная коллекция который содержит только уникальные объекты, такие как HashSet<T>
  • Он реализует INotifyCollectionChanged
  • Он реализует IENumerable<T> (дух) и должен быть обернут в ReadOnlyCollection<T> (дух, дух)
  • Он должен работать с как маленькими, так и большими числами элементов (возможно, изменение внутреннего поведения?)
  • подпись типа должна быть как UniqueList<T> (каксписок, а не ключ / пара значений)
  • Требуется , а не для сортировки.
  • Возможность поиска , а не"обязательный элемент".

Основная цель этого - создать небольшую сетку / сеть между связанными объектами.Таким образом, эта сеть может только уникальные объекты, и должен существовать механизм, который уведомляет приложение, когда происходят изменения в коллекции. Так как это для проверки концепции, область действия находится исключительно внутри сборки (никакие db или fs не имеют никакого значения).важность).

Что такое правильный нативный тип для этого или какие ингредиенты являются лучшими для создания составного ?

1 Ответ

3 голосов
/ 17 мая 2011

Звучит так, как если бы вы могли просто обернуть HashSet<T> в свой собственный тип, просто реализовать INotifyCollectionChanged.Вы можете легко проксировать все, что вам нужно - например, GetEnumerator может просто позвонить set.GetEnumerator() и т. Д. Реализация INotifyCollectionChanged должна быть просто вопросом вызова события, когда элемент добавляется или удаляется.Вы, вероятно, захотите убедиться, что не вызываете событие, если либо добавляете элемент, который уже присутствует, либо удаляете элемент, который не уже присутствует.HashSet<T>.Add/Remove оба возвращают bool, чтобы помочь вам с этим, хотя.

Я не будет называть его UniqueList<T>, поскольку это предполагает поведение, подобное списку, например поддержание порядка.Я бы назвал это ObservableSet<T> или что-то в этом роде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...