Какой тип .NET 2.0 будет лучшим для представления .NET 3.5 HashSet <T>? - PullRequest
0 голосов
/ 12 мая 2010

Я пишу себе библиотеку классов для управления Active Directory.

У меня есть интерфейс:

Public Interface ISourceAnnuaire(Of T as {IGroupe, ITop, IUniteOrganisation, IUtilisateur})
    Readonly Property Changements As Dictionary(Of T, HashSet(Of String))
End Interface

Это свойство Changements используется для сохранения в памяти изменений, которые происходят с конкретным элементом, являющимся частью источника.

Однако я застрял с .NET Framework 2.0. Какой будет ближайший .NET 2.0 для HashSet (Of String)?

Ответы [ 4 ]

3 голосов
/ 12 мая 2010

Либо используйте неуниверсальный Hashtable, либо взломайте словарь и используйте его набор ключей.

Public class HashSetHack<T> : //Whatever collection interfaces you need.
{
    private readonly Dictionary<T, object> dict = new Dictionary<T, object>();

    //whatever code you need to wrap the interfaces using dict.Keys eg:

    public void Add(T value)
    {
      dict.add(value, null);
    }
}
2 голосов
/ 12 мая 2010

Я бы создал свой собственный класс HashSet и за кулисами использовал бы Словарь с пустыми значениями (используйте только ключи).

1 голос
/ 12 мая 2010

Класс Set<T> в библиотеке Power Collections ведет себя почти идентично HashSet<T>. Работает с .NET 2.0.

1 голос
/ 12 мая 2010

Вот особенно гибкий подход:

public abstract class UniqueSet<T, TDictionary> : ICollection<T>
    where TDictionary : IDictionary<T, byte> {

    protected TDictionary _internalDictionary;

    protected UniqueSet(TDictionary dictionary) {
        _internalDictionary = dictionary;
    }

    // implement the ICollection<T> interface
    // using your internal dictionary's Keys property

    // for example:
    public void Add(T value) {
        _internalDictionary.Add(value, 0);
    }

    // etc.

}

public class UniqueSet<T> : UniqueSet<T, Dictionary<T, byte>> {

    public UniqueSet() : base(new Dictionary<T, byte>()) { }

}

Почему абстрактный базовый класс, спросите вы? Ну, с этим подходом вы могли бы также реализовать, например, SortedUniqueSet<T> с SortedList<T, byte> в качестве его внутренней коллекции (и это могло бы реализовать IList<T>) - без необходимости писать практически больше кода. Вы также можете использовать любые другие причудливые реализации IDictionary<TKey, TValue>, которые вы когда-либо находили (если бы вы выбрали).

...