Tôi đang cố gắng tìm sự khác biệt giữa hai danh sách chung chung, như trong ví dụ bên dưới. Mặc dù t1 và t2 chứa các thuộc tính giống nhau, chúng không phải là cùng một đối tượng, vì vậy tôi cần phải triển khai IEqualityComparer.LINQ Ngoại trừ IEqualityComparer tùy chỉnh
Điều này dường như đang làm việc với ví dụ này, nhưng lớp thực sự có một số thuộc tính khác và tôi cũng cần phải làm tương tự với một vài lớp khác.
Vì vậy, tôi đã tự hỏi nếu tôi tái phát minh ra bánh xe?
Có phương pháp so sánh tất cả các thuộc tính của hai đối tượng dễ dàng hơn không? Tại thời điểm này, tôi thực sự chỉ cần đối phó với lớp có chứa các kiểu đơn giản, nhưng nó sẽ là tốt đẹp Tôi có một so sánh làm việc với các lớp có chứa các thể hiện của các lớp khác.
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;
}
}
Xem IEnumerable.Except() và một comparer tùy chỉnh - http://stackoverflow.com/q/1299513/485076 – sll