I created the usual data structure "Coordinates", which determines the position of an object in accordance with a specific system.
The coordinate is defined as follows:
public class Coordinate { public int X; public int Y; private int face; public int Face { get { return face; } set { if (value >= 6 | value < 0) throw new Exception("Invalid face number"); else face = value; } } private int shell; public int Shell { get { return shell; } set { if (value < 0) throw new Exception("No negative shell value allowed"); else shell = value; } } public Coordinate(int face, int x, int y, int shell) { this.X = x; this.Y = y; this.face = face; this.shell = shell; } public static Coordinate operator +(Coordinate a, Coordinate b) { return new Coordinate(a.Face + b.Face, aX + bX, aY + bY, a.Shell + b.Shell); } public override bool Equals(object obj) { Coordinate other = (obj as Coordinate); if (other == null) return false; else return (Face == other.Face && Shell == other.Shell && X == other.X && Y == other.Y); } }
Or, to summarize, it contains int Face (0 to 5), int X, int Y, and int Shell. X, Y and Shell are all linked lower at 0 (inclusive).
I have no experience with hash codes. I need to compare them to make sure they are equal. I tried this:
private const int MULTIPLIER = 89; [...] int hashCode = 1; hashCode = MULTIPLIER * hashCode + obj.X.GetHashCode(); hashCode = MULTIPLIER * hashCode + obj.Y.GetHashCode(); hashCode = MULTIPLIER * hashCode + obj.Face.GetHashCode(); hashCode = MULTIPLIER * hashCode + obj.Shell.GetHashCode(); return hashCode;
Having let go of something that I found during Google. But when I try to compile the code using this method, I am sure that it encountered conflicts, since it never ends. Probably falling into all kinds of random loops, thinking that the heap of coordinates is the same or some.
I am sorry that this question is rather elementary, but for some reason I am at a dead end. I'm just looking for advice on how to write this hash code so that it doesn't collide.
source share