Ich habe 2 Listen, zuerst auf Eltern Objekte zweite Kind Objekte. Das untergeordnete Objekt hat eine zusätzliche Eigenschaft, die ich mit einer Eigenschaft der übergeordneten Klasse vergleichen möchte.Liste des Kindes mit der Liste der Eltern durch einen bestimmten Wert vergleichen
hier ist das Beispiel
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 ;
}
}
und jetzt, wenn ich die folgende testen, ist es immer
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 ???
nicht glaube, ich meine Frage in der GetHashCode Funktion befindet sich
Beliebig Idee, wie man das löst?
(Bitte ignorieren Sie das Design der Anwendung ist das vereinfachte Version der Ausgabe)
Sind Sie sicher, dass 'y' immer ein' Child' in 'var child = (Child) y;' ist? Und in jedem Fall, bitte, klären Sie, was genau Sie meinen, "es scheitert immer" (Ausnahme, falsches Ergebnis ...). –
Ja y ist immer ein Kind, es gibt keine Ausnahmen, ** var diff = parentList.Except (childList, vergleichen); ** sollte leer zurückkehren, aber es ist nicht – Maro