Có bộ sưu tập nào trong C # sẽ không cho phép bạn thêm các mục trùng lặp vào nó không? Ví dụ, với lớp ngớ ngẩn của
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);
}
}
Đoạn mã sau (rõ ràng) sẽ đưa ra một ngoại lệ:
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);
Nhưng có lớp nào sẽ đảm bảo tính duy nhất tương tự, nhưng không có KeyValuePairs không? Tôi nghĩ HashSet<T>
sẽ làm điều đó, nhưng sau khi đọc tài liệu, có vẻ như lớp chỉ là một triển khai thiết lập ( xem hình ).
HashSet<T>
là không đủ?
Dictionary<K,V>
Lớp học không đảm bảo bất kỳ loại thứ tự nào.
HashSet<T>.Add
phương thức và ném khi false
...
HashSet<T>
. MSDN cho biết "Lớp HashSet <T> cung cấp các hoạt động tập hợp hiệu suất cao. Tập hợp là một tập hợp không chứa các phần tử trùng lặp và các phần tử của chúng không theo thứ tự cụ thể."