C# 복잡한 객체를 효율적으로 비교
질문:
여러 레이어의 하위 개체가 포함된 복잡한 개체를 비교하는 것은 까다로울 수 있습니다. 평등을 보장하는 최선의 방법을 결정하는 것은 성능과 정확성을 위해 매우 중요합니다.
해결책:
사용자 정의 유형에 IEquatable<T>
인터페이스를 구현하고 상속된 Object.Equals
및 Object.GetHashCode
메서드를 재정의하여 복잡한 개체를 비교할 수 있는 가장 빠르고 맞춤화된 솔루션을 제공합니다.
세부정보:
값 유형의 경우 Equals
메소드를 직접 호출할 수 있습니다. 참조 유형의 경우 효율성을 보장하기 위해 여러 검사를 결합해야 합니다.
ReferenceEquals
: 참조가 동일한 객체를 가리키는지 확인합니다. NullReferenceException
을 방지하려면 인스턴스 필드나 속성이 null이 아닌지 확인하세요. IEquatable<T>.Equals
호출: 재정의된 Object.Equals
메서드를 우회하고 속도를 향상시킵니다. 예:
<code class="language-csharp">public class Person : IEquatable<Person> { public int Age { get; set; } public string FirstName { get; set; } public Address Address { get; set; } public override bool Equals(Person other) { return this.Age.Equals(other.Age) && ( object.ReferenceEquals(this.FirstName, other.FirstName) || this.FirstName != null && this.FirstName.Equals(other.FirstName) ) && ( object.ReferenceEquals(this.Address, other.Address) || this.Address != null && this.Address.Equals(other.Address) ); } }</code>
대안:
IEquatable<T>
보다 느리고 다용도가 떨어집니다. 참고:
IEquatable<T>
을 구현하는지 확인하세요. Object.GetHashCode
을 재정의하여 구현된 Equals
메서드를 기반으로 적절한 해시 코드를 제공합니다. IEquatable<T>
를 사용하지 마세요. 위 내용은 C#에서 복잡한 개체를 효율적으로 비교할 수 있는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!