Чи є колекція в 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<T>
це зробить, але прочитавши документи, здається, що клас - це лише набір реалізацій ( перейти до фігури ).
HashSet<T>
це недостатньо?
Dictionary<K,V>
Клас не гарантує будь-якого замовлення.
HashSet<T>.Add
методу, і кинути, коли false
...
HashSet<T>
. MSDN каже: "Клас HashSet <T> забезпечує високоефективні операції з набором. Набір - це колекція, яка не містить дублікатів елементів і елементи яких не мають конкретного порядку".