> 백엔드 개발 > C++ > C#에서 효과적인 개체 비교를 위해 Equals() 및 GetHashCode()를 올바르게 재정의하는 방법은 무엇입니까?

C#에서 효과적인 개체 비교를 위해 Equals() 및 GetHashCode()를 올바르게 재정의하는 방법은 무엇입니까?

DDD
풀어 주다: 2025-01-04 21:16:39
원래의
209명이 탐색했습니다.

How to Properly Override Equals() and GetHashCode() for Effective Object Comparison in C#?

효과적인 개체 동등성을 위해 Equals() 및 GetHashCode() 재정의

객체 평등을 추구하는 과정에서 Equals() 및 GetHashCode( ) 방법이 중추적인 역할을 합니다. 사용자 정의 클래스의 경우 의미 있는 비교 및 ​​해싱 메커니즘을 설정하려면 이러한 메서드를 재정의해야 합니다. 이 기사에서는 RecommendationDTO 클래스의 컨텍스트에서 이러한 메서드를 구현하는 올바른 접근 방식을 조명하여 LINQ Except() 메서드와 원활하게 통합할 수 있도록 합니다.

Equals() 재정의

  1. Nullable 유형: 제공된 코드에서 Equals() 메서드는 null 참조를 확인합니다. 그러나 DateTime?과 같은 null 허용 유형의 경우 null 값을 적절하게 처리하도록 비교를 수정해야 합니다.
  2. 모든 속성 고려: 동등 비교에서는 비즈니스 동등성을 정의하는 모든 관련 속성을 고려해야 합니다. 개체. 이 경우 ReferenceId만 비교되지만 다른 중요한 속성도 포함해야 할 수 있습니다.

GetHashCode() 재정의

  1. 해시 코드 계산: GetHashCode() 메서드는 속성을 기반으로 해시 코드를 계산해야 합니다. 동등 비교에 사용됩니다. ReferenceId는 동일성을 위해 사용되므로 해시 코드 계산에도 사용해야 합니다.
  2. 일관된 해싱: 해시 코드는 동일한 개체에 대한 여러 호출에서 일관되어야 합니다. 이렇게 하면 동일한 속성을 가진 객체가 항상 동일한 해시 코드를 가지게 되어 효율적인 해싱 및 조회 작업이 가능해집니다.

샘플 구현

다음은 향상된 기능입니다. RecommendationDTO에 대한 Equals() 및 GetHashCode() 메서드 구현 클래스:

public override bool Equals(object obj)
{
    var item = obj as RecommendationDTO;

    if (item == null || ReferenceId == Guid.Empty || item.ReferenceId == Guid.Empty)
    {
        return false;
    }

    return this.RecommendationId.Equals(item.RecommendationId);
}

public override int GetHashCode()
{
    if (ReferenceId == Guid.Empty)
    {
        throw new InvalidOperationException("ReferenceId cannot be Guid.Empty when calculating hash code.");
    }

    return this.RecommendationId.GetHashCode();
}
로그인 후 복사

이러한 방식으로 Equals() 및 GetHashCode()를 구현하면 이제 RecommendationDTO 클래스를 LINQ Except() 메서드와 함께 효과적으로 사용할 수 있어 동일한 의미 있는 속성을 가진 개체가 처리되도록 할 수 있습니다. 뚜렷하게.

위 내용은 C#에서 효과적인 개체 비교를 위해 Equals() 및 GetHashCode()를 올바르게 재정의하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿