중복 항목을 추가 할 수없는 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
메서드 에서 반환 된 bool 값을 확인하고 다음 과 같은 경우에 던집니다 false
. ...
HashSet<T>
. MSDN은 "HashSet <T> 클래스는 고성능 집합 작업을 제공합니다. 집합은 중복 요소를 포함하지 않고 요소가 특별한 순서가없는 컬렉션입니다."라고 말합니다.