C# 剔除list中的重复值(重写GetHashCode)

本文介绍如何使用LINQ和重写Equals与GetHashCode方法,从Items对象列表中提取唯一项。首先展示了使用GroupBy和Select实现的代码示例,随后讲解了为何重写这两个方法对于使用Distinct操作的重要性。
摘要由CSDN通过智能技术生成

假如有这么一个类


    class Items {
        public int Age { get; set; }

        public string Name { get; set; }

        public string Address { get; set; }
    }

需要提取list中的唯一值,可以使用以下方法

  1. linq
List<Items> items = new List<Items>() {
            new Items{ Age=99,Name="chen",Address="Dalian"},
            new Items{ Age=99,Name="chen1",Address="Dalian1"},
            new Items{ Age=99,Name="chen2",Address="Dalian2"},
            new Items{ Age=99,Name="chen",Address="Dalian"}};

            List<Items> i = items.GroupBy(c => new { c.Age, c.Name, c.Address })
                     .Select(c => c.First()).ToList();

2.重写 Equals 和 GetHashCode 方法

class Items {
        public int Age { get; set; }

        public string Name { get; set; }

        public string Address { get; set; }

        public override bool Equals(object obj)
        {
            if (!(obj is Items))
                return false;
            Items p = (Items)obj;
            return (p.Address == Address && p.Name == Name && p.Age == Age);
        }
        public override int GetHashCode()
        {
            return String.Format("{0}|{1}|{2}", Age, Name, Address).GetHashCode();
        }
    }

此时可以使用distinct了

var i = items.Distinct();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值