제목에서 언급 한 것이 좋은 습관인지 궁금합니다. 필자가 생각하기에 GetHashCode가 두 속성을 기반으로 값을 반환하도록 재정의하는 경우 일치하는 경우 두 개체를 동일하게 처리해야합니다. 논리가 잘 작동하고 코드가 작동하지만 다른 문제가 발생할 수 있는지 여부는 알 수 없습니다. == 연산자 오버라이드에서 GetHashCode 사용
이
은 GetHashCode 사용 :public static bool operator ==(CartesianCoordinates a, CartesianCoordinates b)
{
return a.GetHashCode() == b.GetHashCode(); // Using GetHashCode here
}
public static bool operator !=(CartesianCoordinates a, CartesianCoordinates b)
{
return !(a == b);
}
public override bool Equals(object obj)
{
return this == (CartesianCoordinates)obj; // This just uses the == override
}
public override int GetHashCode()
{
return (this.X + this.Y.ToLower()).GetHashCode(); // GetHashCode hashes the two properties we care about
}
를 내가 전에 한 방법이다 :
이public static bool operator ==(CartesianCoordinates a, CartesianCoordinates b)
{
return a.X == b.X && string.Equals(a.Y, b.Y, StringComparison.CurrentCultureIgnoreCase); // The difference is here
}
public static bool operator !=(CartesianCoordinates a, CartesianCoordinates b)
{
return !(a == b);
}
public override bool Equals(object obj)
{
return this == (CartesianCoordinates)obj;
}
public override int GetHashCode()
{
return (this.X + this.Y.ToLower()).GetHashCode();
}
중요 참고 : CartesianCoordinates에서
객체는, X는 int이며 Y는 문자열입니다.
public int X { get; set; }
public string Y { get; set; }
Lmk, 미리 감사드립니다!
왜 당신이 생각하는'새로운 점 (1, 2) == 새로운 점 (2, 1)'? – SLaks
(1, 0)을 (0, 1)과 비교하여 잘못 표시하십시오. –
죄송합니다, 나는 X가 숫자이고 Y가 편지라고 언급 했어야합니다. 질문 업데이트 중입니다. – Carlo