Bing 地图位置对象 - 如何确定相等性?

Bing Maps Location object - how is equality determined?

在我 运行ning 的一些代码中,我有来自 Bing 地图 api:

的 Location 对象的两个不同实例
Location l1 = new Location(50, 50);
Location l2 = new Location(50, 50);

然而当我 运行 Console.WriteLine(l1.Equals(l2)) 我得到 false。这是为什么?我将如何覆盖 Equals 和 GetHashCode 方法以使上述计算结果为真?

我还想指出,出于某种原因,我无法找到 Location 的文档。(没关系,找到了:HERE 但它是仍然没有帮助)我也尝试直接查看 Location 对象的定义以找到它的 Equals 和 GetHashCode 方法无济于事。

谢谢!

你得到 false 因为比较的是对象地址,而不是内容。 所以 运行:

Console.WriteLine(l1.Longitude==l2.Longitude && l1.Latitude==l2.Latitude) ;

值得指出的是文档没有定义 Equals 方法。这意味着您看到的 Equals 方法是由 .NET 定义的,并且会比较 Graffito 指出的对象地址。

在比较坐标时,您应该只看前 5 或 6 位小数。小数点后 6 位的精度为 10 厘米,这在大多数情况下足够接近以至于相同。如果您直接比较所有小数位,您可能会发现本来应该相同的坐标并不是由于可能在某处发生的浮点错误。这是检查两个 Location 对象是否相同的好方法:

public bool AreEqual(Location l1, Location l2){
    return Math.Round(l1.Latitude, 6) == Math.Round(l2.Latitude, 6) &&
        Math.Round(l1.Longitude, 6) == Math.Round(l2.Longitude, 6);
}