C# - 添加到HashSet <t>时的Stackoverflow异常

时间:2017-08-28 13:01:25

标签: c# exception overflow hashset

我有一个名为Team的课程。

class Team
{
        public Team(string name)
        {
            this.Name = name;
            this.Wins = 0;
            this.Opponents = new HashSet<Team>();
        }

        public string Name { get; set; }
        public int Wins { get; set; }
        public HashSet<Team> Opponents { get; set; }
}

每当我尝试在另一个团队的HashSet中添加一个具有零对手的现有团队时,我会得到一个Stackoverflow异常{0}}

在这里,hometeam在对手中有一个对手,而guestTeam.Opponents.Add(homeTeam);仍然是空的。

它是一款小型测试应用。 Stacktrace的framecount显示3。

任何想法为什么我会抛出这样的例外?

1 个答案:

答案 0 :(得分:-1)

我承认,我无法重现错误。我个人可以正确实施

: IEquatable<Team>

然后:

        public bool Equals(Team other)
    {
        if (ReferenceEquals(null, other)) return false;
        if (ReferenceEquals(this, other)) return true;
        return string.Equals(this.Name, other.Name) && Equals(this.Opponents, other.Opponents);
    }

    public override bool Equals(object obj)
    {
        if (ReferenceEquals(null, obj)) return false;
        if (ReferenceEquals(this, obj)) return true;
        if (obj.GetType() != this.GetType()) return false;
        return Equals((Team)obj);
    }

    public override int GetHashCode()
    {
        unchecked
        {
            return ((this.Name != null ? this.Name.GetHashCode() : 0) * 397) ^ (this.Opponents != null ? this.Opponents.GetHashCode() : 0);
        }
    }

    public static bool operator ==(Team left, Team right)
    {
        return Equals(left, right);
    }

    public static bool operator !=(Team left, Team right)
    {
        return !Equals(left, right);
    }

当然,我无法复制,所以它只是拍摄。