2017-05-05 17 views
0

這是一種遞歸搜索遍歷類Photo的各個子類的對象的二叉樹的方法。爲什麼我的C#代碼在兩個對象完全相同時找不到?

public void SearchForIdentical(Photo searched) 
{ 
    SearchForIdentical(ref root, searched); 
} 

void SearchForIdentical(ref TreeNode current, Photo searched) 
{ 
    try 
    { 
     if(current != null) 
     { 
      if(current.content.Equals(searched)) 
      { 
       throw new PhotoAlreadyExistsException(searched); 
      } 
      SearchForIdentical(ref current.left, searched); 
      SearchForIdentical(ref current.right, searched); 
     } 
    } 
    catch (PhotoAlreadyExistsException e) 
    { 
     Console.WriteLine("This photo already exists! Try a new one!"); 
    } 
} 

「照片」由其各種參數和屬性的值定義(子類不一定都具有相同類型的參數和屬性)。如果用戶輸入一張新照片,在所有參數和屬性中都與現有照片完全相同,則此方法應注意此照片並引發異常。

問題是,它從未發生過。當我對它進行調試時,程序似乎從未將current.content.Equals(searched)作爲前提,即使兩個對象完全相同。

可能是什麼問題?

+4

查找引用相等和值相等之間的差異。 –

+1

你的'equals'方法是如何實現的?默認檢查'GetHashCode'是否相等。兩個不同的對象從不具有相同的散列碼。 – Loetn

+1

目前還不清楚爲什麼你使用'ref',對於初學者...我也強烈避免使用這個「拋出你自己捉住的異常」的方法。除了這些建議之外,請提供[mcve]以便我們可以重現問題。 –

回答

7

如果您從不重寫Photo類中的Equals()方法來比較您描述的屬性,那麼您的代碼將執行對象引用相等比較。

這可以解釋爲什麼當屬性相同時,Equals()方法返回false

相關問題