2017-03-21 39 views
0

我在做一些代碼審查,並停止了以下構造。這是否正確使用ReferenceEquals來檢查方法是否實際返回了作爲參數或新參數傳遞的相同對象?這種使用ReferenceEquals的方法是否正確

int x = 5; 
Foo f = new Foo() 

Foo DoSomething(Foo f) 
{ 
    if(x > 5) 
    { 
     return f; 
    } 
    else 
    { 
     return new Foo(); 
    } 
} 

Foo ff = DoSomething(f); 

if(Object.ReferenceEquals(ff, f)) 
{ 
    //do something 
} 
+0

當然。你也可以使用'ff == f',默認'Object.ReferenceEquals',假設'Foo'不會覆蓋'=='。如果它*覆蓋了操作員,那麼由您來決定哪一個是正確的。 – Rob

回答

1

是的參考類型。在傳遞給方法之前,值類型有點複雜,因爲它們被裝箱。

比較值類型。如果objA和objB是值類型,則在將它們傳遞給ReferenceEquals方法之前,將它們裝箱爲 。這意味着 ,如果objA和objB都代表一個值 類型相同的情況下,的ReferenceEquals方法仍然返回false,

更多細節here

Reference equality of value types

0

ReferenceEquals Method - MSDN

與Equals方法和等號運算符不同,ReferenceEquals方法不能覆蓋。因此,如果要測試兩個對象引用是否相等,並且不確定Equals方法的實現,則可以調用ReferenceEquals方法。但是,請注意,如果objA和objB是值類型,則在將它們傳遞給ReferenceEquals方法之前將它們裝箱。

相關問題