.NET переопределить Equals и HashCode в классе с родительскими / дочерними отношениями - PullRequest
0 голосов
/ 21 октября 2011

У меня есть класс с родительскими / дочерними отношениями, который может выглядеть следующим образом (пропущен 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 в такой ситуации?

...