C# 多种比较器实现

 C#集合实现去重,交集,差集等,用到比较时,有几种方式可以满足。

数据:

var list = new List<MyClass> {
    new MyClass {MyProperty1 = "10", MyProperty2 = "20" },
    new MyClass {MyProperty1 = "10", MyProperty2 = "30" },
    new MyClass {MyProperty1 = "20", MyProperty2 = "20" }
};

方法一:

public class MyClass
{
    public string MyProperty1 { get; set; }

    public string MyProperty2 { get; set; }

    public override bool Equals(object obj)
    {
        if (ReferenceEquals(obj, null)) return false;

        if (ReferenceEquals(this, obj)) return true;

        var o = obj as MyClass;
        return o.MyProperty1.Equals(MyProperty1);
    }

    public override int GetHashCode()
    {
        return MyProperty1.GetHashCode();
    }
}

用法:

list.Distinct();//去重

方法二:

public class MyClass : IEquatable<MyClass>
{
    public string MyProperty1 { get; set; }

    public string MyProperty2 { get; set; }

    public bool Equals(MyClass other)
    {
        if (ReferenceEquals(other, null)) return false;

        if (ReferenceEquals(this, other)) return true;

        return MyProperty1.Equals(other.MyProperty1);
    }
}

用法:

list.Distinct();//去重

方法三:

public class MyClass
{
    public string MyProperty1 { get; set; }

    public string MyProperty2 { get; set; }
}

public class MyClassIEqualityComparer : IEqualityComparer<MyClass>
{
    public bool Equals(MyClass x, MyClass y)
    {
        if (ReferenceEquals(x, null)) return false;
        if (ReferenceEquals(y, null)) return false;
        if (ReferenceEquals(x, y)) return true;

        return x.MyProperty1.Equals(y.MyProperty1);
    }

    public int GetHashCode(MyClass obj)
    {
        return obj.MyProperty1.GetHashCode();
    }
}

用法:

list.Distinct(new MyClassIEqualityComparer());//去重

 

转载于:https://www.cnblogs.com/quxian/p/5692887.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值