当前位置: 首页 > 编程语言 > C#

linq对象相等性以及如何正确重写分享

时间:2023-04-10 17:11:09 C#

linq对象相等性以及如何正确重写Whyvarexcludes=users.Except(matches);不排除比赛?如果我希望相等比较器只使用ID那么正确的方法是什么?示例将不胜感激。publicclassUser{publicintID{get;放;}公共字符串名称{得到;放;}publicoverridestringToString(){returnID.ToString()+":"+Name;}}privatestaticvoidLinqTest2(){IEnumerableusers=newList{newUser{ID=1,Name="Jack"},newUser{ID=2,Name="Tom"},newUser{ID=3,名称=“吉姆”},新用户{ID=4,名称=“乔”},新用户{ID=5,名称=“詹姆斯”},新用户{ID=6,名称=“马特”},新用户{ID=7,Name="Jon"},新用户{ID=8,Name="Jill"}}.OfType();IEnumerablelocalList=newList{newUser{ID=4,Name="Joe"},newUser{ID=5,Name="James"}}.OfType();//创建两个列表后varmatches=fromuinusersjoinluinlocalListonu.IDequalslu.IDselectlu;Console.WriteLine("------------匹配----------------");foreach(variteminmatches){Console.WriteLine(item.ToString());}Console.WriteLine("------------EXCLUDES----------------");varexcludes=users.Except(匹配项);Foreach(variteminexcludes){Console.WriteLine(item.ToString());}}sealedclassCompareUsersById:IEqualityComparer{publicboolEquals(Userx,Usery){if(x==null)returny==null;否则如果(y==null)返回false;否则返回x.ID==y.ID;}publicintGetHashCode(Userobj){returnobj.ID;然后varexcludes=users.Except(matches,newCompareUsersById());您的User类不会覆盖Equals和GetHashCode,因此使用Equals的默认实现,在这种情况下意味着它比较引用。您创建了两个具有相同值的用户对象,但由于它们是不同的对象,因此它们不相等。替代Equals的替代方法是使用采用IEqualityComparer的Except的重载。以上就是C#学习教程:linq对象相等以及如何正确覆盖它共有的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处: