为什么我的 C# 代码无法确定两个对象何时相同?
Why can't my C# code find out when two objects are identical?
这是一种递归搜索二叉树的方法,该二叉树填充了 class 照片的各种子 classes 的对象。
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!");
}
}
A 'photo' 由其各种参数和属性的值定义(子 class 不一定都具有相同类型的参数和属性)。如果用户输入一张新照片,它的所有参数和属性都与现有照片完全相同,则此方法应该注意到它,并抛出异常。
问题是,它从来没有发生过。当我调试它时,程序似乎从未将 true 分配给前提 current.content.Equals(searched)
,即使两个对象完全相同。
可能是什么问题?
如果您从未覆盖 Photo
class 中的 Equals()
方法来比较您描述的属性,您的代码将进行对象引用相等性比较.
这可以解释为什么当属性相同时,Equals()
方法 returns false
.
这是一种递归搜索二叉树的方法,该二叉树填充了 class 照片的各种子 classes 的对象。
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!");
}
}
A 'photo' 由其各种参数和属性的值定义(子 class 不一定都具有相同类型的参数和属性)。如果用户输入一张新照片,它的所有参数和属性都与现有照片完全相同,则此方法应该注意到它,并抛出异常。
问题是,它从来没有发生过。当我调试它时,程序似乎从未将 true 分配给前提 current.content.Equals(searched)
,即使两个对象完全相同。
可能是什么问题?
如果您从未覆盖 Photo
class 中的 Equals()
方法来比较您描述的属性,您的代码将进行对象引用相等性比较.
这可以解释为什么当属性相同时,Equals()
方法 returns false
.