Коллекция, которая разрешает только уникальные элементы в .NET?

Есть ли в C # коллекция, которая не позволяет добавлять в нее повторяющиеся элементы? Например, с глупым классом

public class Customer {
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address { get; set; }

    public override int GetHashCode() {
        return (FirstName + LastName + Address).GetHashCode();
    }

    public override bool Equals(object obj) {
        Customer C = obj as Customer;
        return C != null && String.Equals(this.FirstName, C.FirstName) && String.Equals(this.LastName, C.LastName) && String.Equals(this.Address, C.Address);
    }
}

Следующий код (очевидно) вызовет исключение:

Customer Adam = new Customer { Address = "A", FirstName = "Adam", LastName = "" };
Customer AdamDup = new Customer { Address = "A", FirstName = "Adam", LastName = "" };

Dictionary<Customer, bool> CustomerHash = new Dictionary<Customer, bool>();
CustomerHash.Add(Adam, true);
CustomerHash.Add(AdamDup, true);

Но существует ли класс, который аналогичным образом гарантирует уникальность, но без KeyValuePairs? Я думал, что HashSet сделает это, но, прочитав документацию, кажется, что класс - это просто реализация набора ( см. Рисунок ).

98
задан nawfal 23 September 2013 в 19:48
поделиться