C # içinde, ona yinelenen öğeler eklemenize izin vermeyecek bir koleksiyon var mı? Örneğin, aptal sınıfıyla
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);
}
}
Aşağıdaki kod (açıkça) bir istisna oluşturacaktır:
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);
Ancak benzer şekilde benzersizliği garanti edecek, ancak KeyValuePairs olmadan bir sınıf var mı? Bunu HashSet<T>
yapacağımı düşünmüştüm , ancak dokümanları okuduktan sonra, sınıf sadece bir set uygulaması gibi görünüyor ( şekle bakın ).
HashSet<T>
yetersiz olduğunu biraz daha açıklayabilir misin ?
Dictionary<K,V>
sınıf değil sırayla her türlü garanti.
HashSet<T>.Add
yöntemden döndürülen bool değerini kontrol edin ve şunu atın false
...
HashSet<T>
. MSDN, "HashSet <T> sınıfı, yüksek performanslı küme işlemleri sağlar. Küme, yinelenen öğeler içermeyen ve öğeleri belirli bir sırada olmayan bir koleksiyondur."