首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我是否必须在新类中覆盖GetHashCode和Equals?

在许多情况下,您需要在自定义类中覆盖 GetHashCodeEquals 方法。这是因为默认情况下,这两个方法是根据对象的引用进行比较的,而不是根据对象的内容进行比较。

如果您希望将对象存储在哈希表中,或者需要比较对象的内容是否相等,那么您需要覆盖 GetHashCodeEquals 方法。

在覆盖 GetHashCode 方法时,您需要确保返回的哈希值是基于对象的内容计算的,并且尽可能地分布均匀。在覆盖 Equals 方法时,您需要确保比较的是对象的内容是否相等,而不是引用是否相等。

以下是一个示例,展示了如何在自定义类中覆盖 GetHashCodeEquals 方法:

代码语言:csharp
复制
public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public override int GetHashCode()
    {
        unchecked
        {
            int hashCode = 17;
            hashCode = hashCode * 23 + FirstName.GetHashCode();
            hashCode = hashCode * 23 + LastName.GetHashCode();
            return hashCode;
        }
    }

    public override bool Equals(object obj)
    {
        if (obj == null || GetType() != obj.GetType())
        {
            return false;
        }

        var other = (Person)obj;
        return FirstName == other.FirstName && LastName == other.LastName;
    }
}

在这个示例中,我们覆盖了 GetHashCodeEquals 方法,以便我们可以将 Person 对象存储在哈希表中,并且可以比较它们的内容是否相等。

总之,在许多情况下,您需要在自定义类中覆盖 GetHashCodeEquals 方法,以确保正确地比较对象的内容。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

8分3秒

Windows NTFS 16T分区上限如何破,无损调整块大小到8192的需求如何实现?

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券