그렇습니다. 나는 열거 할 수 있고 명확한 가치를 얻고 싶습니다.
를 사용하면 System.Linq
물론이라는 확장 방법이 Distinct
있습니다. 간단한 경우 다음과 같이 매개 변수없이 사용할 수 있습니다.
var distinctValues = myStringList.Distinct();
좋고 훌륭하지만 동등성을 지정 해야하는 열거 가능한 객체가있는 경우 사용 가능한 유일한 과부하는 다음과 같습니다.
var distinctValues = myCustomerList.Distinct(someEqualityComparer);
항등 비교 자 인수는의 인스턴스 여야합니다 IEqualityComparer<T>
. 물론이 작업을 수행 할 수는 있지만 다소 장황하고 음탕합니다.
내가 기대했던 것은 람다가 걸리는 과부하입니다 .Func <T, T, bool> :
var distinctValues
= myCustomerList.Distinct((c1, c2) => c1.CustomerId == c2.CustomerId);
그러한 확장이 있는지 또는 동등한 해결 방법이 있는지 아는 사람이 있습니까? 아니면 뭔가 빠졌습니까?
또는 IEqualityComparer 인라인을 지정하는 방법이 있습니까?
최신 정보
Anders Hejlsberg 가이 주제에 대한 MSDN 포럼 의 게시물 에 대한 답변을 찾았습니다 . 그는 말한다 :
두 객체가 동일하게 비교 될 때 동일한 GetHashCode 반환 값을 가져야합니다. 그렇지 않으면 Distinct에서 내부적으로 사용되는 해시 테이블이 올바르게 작동하지 않습니다. IEqualityComparer는 Equals 및 GetHashCode의 호환 가능한 구현을 단일 인터페이스로 패키지하기 때문에 IEqualityComparer를 사용합니다.
나는 그것이 의미가 있다고 생각합니다 ..