当两个对象相同时,为什么我的C#代码无法找到?

D.W*_*.W. 0 c# tree equals object

这是一种递归搜索二进制树的方法,该二进制树填充了类Photo的各种子类的对象.

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!");
    }
}
Run Code Online (Sandbox Code Playgroud)

"照片"由其各种参数和属性的值定义(子类不一定都具有相同类型的参数和属性).如果用户键入新照片,其所有参数和属性与现有照片完全相同,则此方法应注意它,并抛出异常.

问题是,它永远不会发生.当我调试它时,程序似乎永远不会给前提赋予真实current.content.Equals(searched),即使两个对象完全相同.

可能是什么问题呢?

toa*_*akz 7

如果您从未覆盖类中的Equals()方法来对Photo您描述的属性进行比较,那么您的代码将进行对象引用相等性比较.

这可以解释为什么当属性相同时,Equals()方法返回false.