사용자 정의 개체에 대한 LINQ의 고유 메서드 비효율성 해결
LINQ의 Distinct()
메서드는 사용자 지정 개체와 함께 사용할 경우 비효율적일 수 있습니다. 이는 기본적으로 참조 동일성에 의존하기 때문입니다. 즉, 두 개체가 서로 다른 메모리 위치를 차지하는 경우에만 서로 다른 개체로 간주합니다. 동일한 속성 값을 가진 동일한 개체는 별도의 개체로 처리되어 중복된 결과가 발생합니다.
해결책은 사용자 정의 개체 클래스 내에 IEquatable<T>
인터페이스를 구현하는 데 있습니다. 이를 통해 메모리 주소가 아닌 속성을 기반으로 개체의 동등성을 결정하는 방법을 정의할 수 있습니다.
여기 Author
를 구현하는 개선된 IEquatable<Author>
클래스가 있습니다.
<code class="language-csharp">public class Author : IEquatable<Author> { public string FirstName { get; set; } public string LastName { get; set; } public bool Equals(Author other) { if (other is null) return false; return FirstName == other.FirstName && LastName == other.LastName; } public override int GetHashCode() { return HashCode.Combine(FirstName, LastName); } }</code>
Equals()
메서드를 재정의하고 GetHashCode()
을 구현하면 Distinct()
및 Author
속성을 기반으로 중복 FirstName
개체를 올바르게 식별하고 제거하는 데 필요한 논리를 LastName
에 제공할 수 있습니다. 보다 강력한 해시 코드 생성을 위해 HashCode.Combine
을 사용하는 것에 유의하세요. 이렇게 하면 Equals()
에서 동일하다고 간주되는 객체도 동일한 해시 코드를 생성하게 됩니다. 이 접근 방식을 사용하면 Distinct()
은 이제 이름을 기준으로 중복 작성자 개체를 정확하게 식별하고 제거합니다.
위 내용은 LINQ의 Distinct 메서드가 사용자 지정 개체에 비효율적인 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!