มีคอลเล็กชันใน 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>
ฉันไม่เข้าใจปัญหาของคุณกับ MSDN กล่าวว่า "คลาส HashSet <T> ให้การดำเนินการเซ็ตประสิทธิภาพสูงชุดคือคอลเล็กชันที่ไม่มีองค์ประกอบที่ซ้ำกันและองค์ประกอบที่ไม่มีลำดับใด ๆ "