Object Identity vs Equal Object Values

Check Equality by Value

public static bool operator == (Point first, Point second)
{
	// return true if both first and second are same reference, or both null
	if (ReferenceEquals(first, second)) return true;

	// if either (but not both due to first check) is null, return false
	if (ReferenceEquals(first, null) || ReferenceEquals(second, null)) return false;

	// both not null, compare values
	return first.X == second.X && first.Y == second.Y;
}

Overriding ToString()

public class Coordinate
{
    public string Longitude { get; set; }
    public string Latitude { get; set; }
    public override string ToString() => $"{Longitude} {Latitude}";
}

Overriding GetHashCode()

GetHashCode() Implementation Principles