2011-09-06 29 views

回答

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將對象相互比較相等,所以會返回true。

如果兩個表達式的編譯時間類型是long==會比較它們作爲長值那就沒問題了。

2

在猜測,我會說你是比較兩個對象,而不是兩個整數。對象沒有指向相同的內存地址,因此不相等。 如果你做一個Convert.ToInt64(otherRouteValue) == Convert.ToInt64(RouteKeyValue.Value)你應該得到想要的結果

2

==比較對象(如果有相同的對象,相同的引用返回true)。

要評估對象值之間的相等性,請使用obj.Equals(obj)方法。 http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx

你的情況:routeKeyValue.Value.Equals(otherRouteKeyValue);

1

因爲它是object秒。您可以使用.Equals,或將其聲明爲long