Это, конечно, больше кода, чем Я бы хотел бы написать для метода equals. Существует много избыточных проверок, таких как проверка ReferenceEquals и HashCodes (я знаю, что эти проверки избыточны, потому что последние строки в вашей функции проверяют структурное равенство). Сосредоточьтесь на простом и читаемом коде.
public bool Equals(object o)
{
Point2 p = o as Point2;
if (o != null)
return this.X == o.X && this.Y == o.Y;
else
return false;
}
Поскольку ваш метод equals использует структурное равенство, убедитесь, что вы переопределяете GetHashCode с помощью реализации, основанной также на ваших полях.