c# 两个list比较_C# 两个List<T>(T是类)使用Contains比较元素的方法

众所周知,List创建的对象是引用类型,也就是说,两个完全相同的List对象(其中元素及其元素的属性也相同),但引用地址不同,在使用Contains判断两List中元素包含比较时,返回都是False,因此,我们需要重新“定义”Contains,实际上,Contains内部是Equals方法的封装,所以,我们需要重写Equals方法:

ff1fd21e03377332d11c8e341ceafb5d.png

 1  public class UserInfo : IEquatable 2  { 3      public string UserName { get; set; } 4      public int Age { get; set; } 5  6      // 重写Equals方法 7      public override bool Equals(object obj) 8      { 9          if (obj == null) return false;10 11          UserInfo usr = obj as UserInfo;12          if (usr == null)13              return false;14          else15              return Equals(usr);16      }17 18      // 此方法必须一起重写19      public override int GetHashCode()20      {21          return UserName.GetHashCode() ^ Age.GetHashCode();22      }23 24      // 实际调用的Equals方法25      public bool Equals(UserInfo usr)26      {27          if (usr == null) return false;28          return (this.UserName == usr.UserName && this.Age == usr.Age);29      }30  }

ff1fd21e03377332d11c8e341ceafb5d.png

ff1fd21e03377332d11c8e341ceafb5d.png

 1 static void Main(string[] args) 2 { 3     List users1 = new List() 4     { 5         new UserInfo(){UserName="aaa",Age=20}, 6         new UserInfo(){UserName="bbb",Age=30}, 7     }; 8  9     List users2 = new List()10     {11         new UserInfo(){UserName="aaa",Age=20},12         new UserInfo(){UserName="bbb",Age=40},13     };14 15     users1.ForEach((m) =>16     {17         if (!users2.Contains(m))18             Console.WriteLine($"users1中有,但users2中没有:{m.UserName},{m.Age}");19     });20     // 结果:bbb,3021 22     users2.ForEach((m) =>23     {24         if (!users1.Contains(m))25            Console.WriteLine($"users2中有,但users1中没有:{m.UserName},{m.Age}");26     });27     // 结果:bbb,4028 29     Console.ReadKey();30 }

出处:


https://www.cnblogs.com/seanyan/archive/2020/04/27/12765151.html

版权申明:本文来源于网友收集或网友提供,如果有侵权,请转告版主或者留言,本公众号立即删除。

226877af3c28e67f6a946c5d29330e0e.gif

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值