以下情况如何?
我们有两个肺值相等,但它们不相等......
答案 0 :(得分:10)
表达式的编译时类型为object
,而不是long
。因此==
正在比较引用。就像这样:
object x = 9L;
object y = 9L;
Console.WriteLine(x == y); // false
Console.WriteLine(x.Equals(y)); // true
Console.WriteLine(object.Equals(x, y)); // true; avoids NullReferenceException
你有两个不同的对象,都是长值的“盒子”。 ==
上的object
仅比较引用是否引用完全相同的对象。 Equals
将对象与 value 相等进行比较,因此将返回true。
如果两个表达式的编译时类型为long
,==
会将它们作为长值进行比较,那就没问题了。
答案 1 :(得分:2)
猜测,我会说你正在比较两个对象,而不是两个整数。对象不指向相同的内存地址,因此不相等。
如果您执行Convert.ToInt64(otherRouteValue) == Convert.ToInt64(RouteKeyValue.Value)
,则应获得所需的结果
答案 2 :(得分:2)
==
比较对象(如果有相同的对象,相同的引用,则返回true)。
要评估对象值之间的相等性,请使用obj.Equals(obj)
方法。
http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx
在您的情况下:routeKeyValue.Value.Equals(otherRouteKeyValue);
答案 3 :(得分:1)
因为它是object
s。您可以使用.Equals,或将它们声明为long
。