【发布时间】:2016-03-20 14:56:43
【问题描述】:
我有 2 个列表,第一个是父对象,第二个是子对象。子对象有额外的属性,我想与父类的属性进行比较。
这里是例子
public class Parent
{
public int X { get; set; }
}
public class Child : Parent
{
public int Y { get; set; }
}
public class ClassXCompare : IEqualityComparer<Parent>
{
public bool Equals(Parent x, Parent y)
{
var child = (Child)y;
return x.X == child.Y;
}
public int GetHashCode(Parent parent)
{
int parentXhash = parent.X.GetHashCode();
// Calculate the hash code for the product.
return parentXhash ;
}
}
现在如果我测试以下内容,它总是失败
var parentList= new List<Parent>
{
new Parent {X = 5},
new Parent {X = 6}
};
var childList= new List<Child>
{
new Child {Y = 5},
new Child {Y = 6}
};
var compare = new ClassXCompare();
var diff = parentList.Except(childList, compare);
Assert.IsTrue(!diff.Any()); // Fail ???
我认为我的问题在于 GetHashCode 函数
知道如何解决这个问题吗?
(请忽略应用程序的设计,这是简化的 问题的版本)
【问题讨论】:
-
您确定
y在var child = (Child)y;中始终是Child吗?无论如何,请澄清“它总是失败”的确切含义(例外,错误的结果......)。 -
是的 y 总是一个孩子,没有例外,var diff = parentList.Except(childList, compare); 应该返回空但它没有