У меня есть класс с родительскими / дочерними отношениями, который может выглядеть следующим образом (пропущен GetHashCode impl):
public class Foo
{
public Foo()
{
this.Children = new List<Foo>();
}
public Foo Parent { get; set; }
public IList<Foo> Children { get; private set; }
public override bool Equals(object obj)
{
if (obj == null)
{
return false;
}
Foo foo = obj as Foo;
if ((object)foo == null)
{
return false;
}
return this.Parent.Equals(foo.Parent) &&
this.Children.SequenceEqual(foo.Children);
}
}
Когда я пробую этот код, возникает исключение StackOverflowException.
[TestMethod]
public void TestEqual()
{
var parent1 = new Foo();
var child1 = new Foo() { Parent = parent1 };
var child2 = new Foo() { Parent = parent1 };
parent1.Children.Add(child1);
parent1.Children.Add(child2);
var parent2 = new Foo();
var child3 = new Foo() { Parent = parent2 };
var child4 = new Foo() { Parent = parent2 };
parent2.Children.Add(child1);
parent2.Children.Add(child2);
Assert.AreEqual(parent1, parent2);
}
Итак, как мне реализовать Equals / HashCode в такой ситуации?