아래 예제와 같이 두 가지 일반 목록의 차이점을 찾으려고합니다. t1과 t2는 동일한 속성을 포함하지만 동일한 개체가 아니므로 IEqualityComparer를 구현해야합니다.Linq 사용자 정의 IEqualityComparer를 제외합니다.
이 예제에서는 작동하지만 실제 클래스에는 여러 가지 다른 속성이 있으며 몇 가지 다른 클래스에서도 동일한 작업을 수행해야합니다.
그래서 휠을 다시 발명했는지 궁금합니다.
두 개체의 모든 속성을 비교하는 더 쉬운 방법이 있습니까? 현재로서는 단순한 형식을 포함하는 클래스에만 대처할 필요가 있지만 다른 클래스의 인스턴스를 포함하는 클래스로 작업 한 비교자를 사용하면 좋을 것입니다. 나는 보통 갈
void Main()
{
var t1 = new Sizes { Name = "Test" , Size = 1} ;
var t2 = new Sizes { Name = "Test" , Size = 1} ;
var list1 = new List<Sizes>();
var list2 = new List<Sizes>();
list1.Add(t1);
list2.Add(t2);
var differences = list2.Except(list1 , new SizesComparer());
// differences should be empty.
}
public class Sizes
{
public string Name { get; set; }
public int Size { get; set; }
}
public class SizesComparer : IEqualityComparer<Sizes>
{
bool IEqualityComparer<Sizes>.Equals(Sizes x, Sizes y)
{
return (x.Name.Equals(y.Name) && x.Size.Equals(y.Size));
}
int IEqualityComparer<Sizes>.GetHashCode(Sizes obj)
{
if (Object.ReferenceEquals(obj, null))
return 0;
return obj.Name.GetHashCode() + obj.Size;
}
}
참조 IEnumerable.Except()와 사용자 정의 비교 자 - http://stackoverflow.com/q/1299513/485076 – sll