POINT2 클래스 말할 및 이하 같음은 다음 경우, OBJ 걸리는 하나사용자 정의 유형에 대해 Equals를 가장 잘 구현하는 방법은 무엇입니까?
public override bool Equals (object obj)
{
// STEP 1: Check for null
if (obj == null)
{
return false;
}
// STEP 3: equivalent data types
if (this.GetType () != obj.GetType ())
{
return false;
}
return Equals ((Point2) obj);
}
public bool Equals (Point2 obj)
{
// STEP 1: Check for null if nullable (e.g., a reference type)
if (obj == null)
{
return false;
}
// STEP 2: Check for ReferenceEquals if this is a reference type
if (ReferenceEquals (this, obj))
{
return true;
}
// STEP 4: Possibly check for equivalent hash codes
if (this.GetHashCode () != obj.GetHashCode ())
{
return false;
}
// STEP 5: Check base.Equals if base overrides Equals()
System.Diagnostics.Debug.Assert (
base.GetType () != typeof (object));
if (!base.Equals (obj))
{
return false;
}
// STEP 6: Compare identifying fields for equality.
return ((this.X.Equals (obj.X)) && (this.Y.Equals (obj.Y)));
}
못해이 객체 obj'는 구조체 인'경우에 날려가있다? – row1
@ row1 아니요. 구조체가 박스 처리되며 상자형 구조체는 as 연산자가 평가 될 때 'null'이됩니다. 정의 된 타입이 구조체라면 'as'를 사용하는 대신 명시 적 캐스트를해야합니다 (또는 nullable 구조체를 사용하십시오). nullable 구조체가 아닌 경우 null 검사도 제거합니다. – Servy
매우 간단하고 합리적인 구현, 나는 그것을 좋아한다, 고맙습니다. –