私は親オブジェクトの2番目の子オブジェクトのリストを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); **空を返しますが、 – Maro