我正在尝试查找两个泛型列表之间的差异,就像下面的示例一样。
即使t1和t2包含相同的属性,它们也不是同一个对象,因此我需要实现一个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;
}
}