using System; using System.Collections.Generic; public class Test { public static void Main() { var x = new Int16_2D { a = 1, b = 2 }; var set = new HashSet { x }; var y = new Int16_2D { a = 1, b = 2 }; Console.WriteLine(set.Contains(y)); // True x.a = 3; Console.WriteLine(set.Contains(y)); // False Console.WriteLine(set.Contains(x)); // False! } } public class Int16_2D { public Int16 a, b; public override bool Equals(Object other) { return other is Int16_2D && a == ((Int16_2D)other).a && b == ((Int16_2D)other).b; } public override int GetHashCode() { return a | (int)b * 65536; } }