在我正在运行的一些代码中,我有来自Bing Maps api的两个不同的Location对象实例:
Location l1 = new Location(50, 50);
Location l2 = new Location(50, 50);
但是当我运行Console.WriteLine(l1.Equals(l2))
时,我得到false
。这是为什么?我将如何覆盖Equals和GetHashCode方法,以便上面的计算结果为true?
我还想注意,由于某些原因,我找不到位置文档。(没关系,发现它:HERE但它仍然没有帮助)我还尝试直接查看Location对象的定义,找不到它的Equals和GetHashCode方法。
谢谢!
答案 0 :(得分:1)
值得指出的是,文档没有定义Equals方法。这意味着您看到的Equals方法由.NET定义,并比较Graffito指出的对象地址。
在比较坐标时,您应该只查看前5或6位小数。 6位小数的精度为10cm,在大多数情况下足够接近相同。如果直接比较所有小数位,您可能会发现相同的坐标不是由于可能出现在某处的浮点错误引起的。这是检查两个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);
}
答案 1 :(得分:0)
你得到的是错误,因为比较了对象地址,而不是内容。 所以跑:
Console.WriteLine(l1.Longitude==l2.Longitude && l1.Latitude==l2.Latitude) ;