이것은 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!");
}
}
'사진'은 다양한 인수와 속성 값으로 정의됩니다 (하위 클래스는 모두 동일한 종류의 인수와 속성을 가지고있는 것은 아닙니다). 사용자가 새 사진을 입력하면 모든 인수와 속성이 기존 사진과 완전히 동일하므로이 메서드는이를 인식하고 예외를 throw합니다.
문제는 발생하지 않습니다. 디버깅을 할 때 두 개의 객체가 정확히 동일하더라도 프로그램이 전제 current.content.Equals(searched)
에 절대로 할당하지 못하는 것처럼 보였습니다.
무엇이 문제 일 수 있습니까?
참조 동등성과 값 동등성의 차이점을 찾으십시오. –
당신의'equals' 메쏘드는 어떻게 구현되어 있습니까? 기본값은'GetHashCode'가 같은지 검사합니다. 두 개의 다른 객체에는 해시 코드가 없습니다. – Loetn
왜 처음에는'ref'를 사용하는지 명확하지 않습니다 ... 또한 "당신이 스스로 잡는 예외를 던지십시오"접근법을 사용하는 것을 강력히 피할 것입니다. 제안을 넘어서 문제를 재현 할 수 있도록 [mcve]를 제공해주십시오. –