首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现IEqualityComparer

实现IEqualityComparer
EN

Stack Overflow用户
提问于 2022-02-22 13:06:05
回答 1查看 315关注 0票数 0

我在类中添加了IEqualityComparer实现,不确定下面的代码是否是正确的,特别是Equals(object x, object y)函数:我们应该使用override还是对override方法进行new实现,比如:?

代码语言:javascript
复制
public class PropertySettings : IEqualityComparer
{
    public int? Precision { get; set; }
    public double? Min { get; set; }
    public double? Max { get; set; }

    public override bool Equals(object obj)
    {
        if (obj == null || !(obj is PropertySettings))
            return false;

        var ps = obj as PropertySettings;

        return
            ps.Precision == this.Precision &&
            ps.Min == this.Min &&
            ps.Max == this.Max;
    }

    public bool Equals(object x, object y)
    {
        if (x != null && x is PropertySettings)
            return x.Equals(y);
        else
            return object.Equals(x, y);
    }

    public override int GetHashCode()
    {
        return HashCode.Combine(Precision, Min, Max);
    }

    public int GetHashCode(object obj)
    {
        if (obj == null)
            return 0;
        if (obj is PropertySettings)
            return (obj as PropertySettings).GetHashCode();
        else
            return obj.GetHashCode();
    }
}

EN

回答 1

Stack Overflow用户

发布于 2022-02-22 13:33:40

根据微软提供的IEqualityComparer代码示例,您将希望使用新关键字(因此隐藏对象的等于实现)来实现Equals。

https://learn.microsoft.com/en-us/dotnet/api/system.collections.iequalitycomparer.equals?view=net-6.0#system-collections-iequalitycomparer-equals(system-object-system-object)

正如下面Jeroen Mostert所指出的,这些可能是不正确的。他关于实现IEqualityComparer.Equals的建议也很有效。您也可以使用override。这些都将提供不同的功能,基于您的转换。以下是一个简短的解释:

https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/knowing-when-to-use-override-and-new-keywords

基本上,使用override意味着您将使用您的.Equals实现,而不管您是object还是PropertySettings。如果您是对象时使用new,您将使用基本的.Equals(...功能(在本例中是object的功能)。如果显式实现IEqualityComparer.Equals(...,那么在将对象转换为IEqualityComparer时将使用.Equals。这让您可以选择如何使用您的类。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71221876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档