I have a simple class:
public class TileName { int Zoom, X, Y; public override bool Equals (object obj) { var o = obj as TileName;
I've actually found this to be really effective.
public override int GetHashCode () { return Zoom.GetHashCode() ^ X.GetHashCode() ^ Y.GetHashCode(); }