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)
作爲前提,即使兩個對象完全相同。
可能是什麼問題?
查找引用相等和值相等之間的差異。 –
你的'equals'方法是如何實現的?默認檢查'GetHashCode'是否相等。兩個不同的對象從不具有相同的散列碼。 – Loetn
目前還不清楚爲什麼你使用'ref',對於初學者...我也強烈避免使用這個「拋出你自己捉住的異常」的方法。除了這些建議之外,請提供[mcve]以便我們可以重現問題。 –