首页 >后端开发 >C++ >如何正确重写 LINQ 的 except() 方法的 Equals() 和 GetHashCode()?

如何正确重写 LINQ 的 except() 方法的 Equals() 和 GetHashCode()?

Susan Sarandon
Susan Sarandon原创
2025-01-05 06:32:40215浏览

How to Properly Override Equals() and GetHashCode() for LINQ's Except() Method?

为自定义类实现 Equals() 和 GetHashCode() 方法:一个实际示例

重写 Equals() 和 GetHashCode() 方法在自定义类中对于确保正确的对象比较和散列至关重要。本文演示了为您的RecommendationDTO 类实现这些方法的正确方法,以使其能够与 LINQ 的 except() 方法一起使用。

实现 Equals()

重写 Equals (),您需要提供一个自定义实现,根据对象的独特属性来比较对象。在您的情况下,RecommendationId 属性是一个合适的标识符。下面是正确的实现:

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

    if (item == null)
    {
        return false;
    }

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

实现 GetHashCode()

GetHashCode() 方法为对象生成哈希码。为了保持比较一致,对于具有相同标识属性的对象,返回的哈希码应该相同。在您的情况下,您可以返回RecommendationId属性的哈希代码:

public override int GetHashCode()
{
    return this.RecommendationId.GetHashCode();
}

使用LINQ except()

使用这些重写的方法,您现在可以利用 LINQ except() 方法根据RecommendationId 属性排除彼此相等的对象。例如:

var list1 = new List<RecommendationDTO> { /* ... */ };
var list2 = new List<RecommendationDTO> { /* ... */ };

var result = list1.Except(list2);

注意: 确保检查空值并为属性和方法使用正确的大小写。

以上是如何正确重写 LINQ 的 except() 方法的 Equals() 和 GetHashCode()?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn