고객 맞춤 IEqualityComparer<T>
을 전달하십시오.
첫째, 해당 인터페이스를 구현하는 클래스 만들기 : 다음
public class PersonNameEqualityComparer:IEqualityComparer<Person>
{
public int GetHashCode (Person obj)
{
return obj.Name.GetHashcode();
}
public bool Equals (Person x, Person y)
{
return x.Name == y.Name;
}
}
을, 당신이 할 필요가 교차 방법에 그 IEqualityComparer
의 인스턴스를 전달합니다.
var result = listA.Intersect(listB, new PersonNameEqualityComparer());
당신은 제네릭과 람다 사용하여 모든 개체 및 속성이 확장 할 수 : 당신은 그럼 그냥 이런 식으로 사용할 수
public class PropertyEqualityComparer<TObject, TProperty> : IEqualityComparer<TObject>
{
Func<TObject, TProperty> _selector;
IEqualityComparer<TProperty> _internalComparer;
public PropertyEqualityComparer(Func<TObject, TProperty> propertySelector, IEqualityComparer<TProperty> innerEqualityComparer = null)
{
_selector = propertySelector;
_internalComparer = innerEqualityComparer;
}
public int GetHashCode(TObject obj)
{
return _selector(obj).GetHashCode();
}
public bool Equals(TObject x, TObject y)
{
IEqualityComparer<TProperty> comparer = _internalComparer ?? EqualityComparer<TProperty>.Default;
return comparer.Equals(_selector(x), _selector(y));
}
}
을 :
var result = listA.Intersect(listB, new PropertyEqualityComparer<Person, string>(p => p.Name));
또는 같은 :
var result = listA.Intersect(listB, new PropertyEqualityComparer<Person, string>(p => p.Age));
nd 등등.
이것은 몇 분 안에 세 번째 질문입니다. 시도해 보셨습니까? – Sayse
사용자 정의'IEqualityComparer'로 오버로드 된 버전을 사용하십시오. [MSDN] (http://msdn.microsoft.com/en-us/library/bb355408.aspx)을보십시오 –
Zbigniew
google "C# linq"로 입력 할 수 있습니까? – Dennis