长型平等

时间:2011-09-06 09:37:42

标签: .net

以下情况如何?

enter image description here

我们有两个肺值相等,但它们不相等......

4 个答案:

答案 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