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<Int16_2D> { 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;
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKCnB1YmxpYyBjbGFzcyBUZXN0CnsKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKICAgIHsKICAgICAgICB2YXIgeCA9IG5ldyBJbnQxNl8yRCB7IGEgPSAxLCBiID0gMiB9OyAKICAgICAgICB2YXIgc2V0ID0gbmV3IEhhc2hTZXQ8SW50MTZfMkQ+IHsgeCB9OyAKCiAgICAgICAgdmFyIHkgPSBuZXcgSW50MTZfMkQgeyBhID0gMSwgYiA9IDIgfTsgCiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoc2V0LkNvbnRhaW5zKHkpKTsgICAvLyBUcnVlIAoKICAgICAgICB4LmEgPSAzOyAKICAgICAgICBDb25zb2xlLldyaXRlTGluZShzZXQuQ29udGFpbnMoeSkpOyAgIC8vIEZhbHNlIAogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKHNldC5Db250YWlucyh4KSk7ICAgLy8gRmFsc2UhIAoKICAgIH0KfQoKcHVibGljIGNsYXNzIEludDE2XzJEICAgCnsgICAKICAgIHB1YmxpYyBJbnQxNiBhLCBiOyAgIAogICAKICAgIHB1YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhPYmplY3Qgb3RoZXIpICAgCiAgICB7ICAgCiAgICAgICAgcmV0dXJuIG90aGVyIGlzIEludDE2XzJEICYmICAgCiAgICAgICAgYSA9PSAoKEludDE2XzJEKW90aGVyKS5hICYmICAgCiAgICAgICAgYiA9PSAoKEludDE2XzJEKW90aGVyKS5iOyAgIAogICAgfQoKICAgIHB1YmxpYyBvdmVycmlkZSBpbnQgR2V0SGFzaENvZGUoKQogICAgewogICAgICAgIHJldHVybiBhIHwgKGludCliICogNjU1MzY7CiAgICB9ICAgCn0=