解决 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中文网其他相关文章!