c# – 在LINQ中使用Union合并列表时删除重复项

c# – 在LINQ中使用Union合并列表时删除重复项,第1张

概述我试图在 LinqPad中使用list.Union合并两个列表,但是我不能让它工作,想检查我的理解是否正确. 给定这个简单的类: public class Test { public int Id { get; set;} public int field1 { get; set; } public bool Equals(Test other) { 我试图在 LinqPad中使用List.Union合并两个列表,但是我不能让它工作,想检查我的理解是否正确.

给定这个简单的类:

public class Test {   public int ID { get; set;}   public int fIEld1 { get; set; }   public bool Equals(Test other)   {              return this.ID.Equals(other.ID);   }}

和两个列表填充如下:

List<Test> List = new List<Test>();List.Add( new Test { ID = 1,fIEld1 = 1});List.Add( new Test { ID = 1,fIEld1 = 2});List.Add( new Test { ID = 2,fIEld1 = 3});List.Add( new Test { ID = 2,fIEld1 = 4});List<Test> List2 = new List<Test>();List2.Add( new Test { ID = 1,fIEld1 = 1});List2.Add( new Test { ID = 1,fIEld1 = 2});List2.Add( new Test { ID = 2,fIEld1 = 3});List2.Add( new Test { ID = 2,fIEld1 = 4});

然后我尝试:var mergedList = List.Union(List2).ToList();并使用简单的foreach循环输出数据并获取此输出:

ID: 1 -------- 1ID: 1 -------- 2ID: 2 -------- 3ID: 2 -------- 4ID: 1 -------- 1ID: 1 -------- 2ID: 2 -------- 3ID: 2 -------- 4

我的印象是,联盟应该删除重复的内容:

ID: 1 -------- 1ID: 1 -------- 2ID: 2 -------- 3ID: 2 -------- 4

我做错了什么或者我误解了吗?

此外,如果没有明确地覆盖Test类中的Equals方法,它是否工作?

谢谢

解决方法 在你的情况下,你只需要定义一些方法,liNQ什么都不知道.这就像创建方法bool heyEquateMeWith(测试其他),并期望liNQ将在进行设置 *** 作时调用它.

你需要定义你的类如下(覆盖Object的Equals和GetHashCode方法):

public class Test {   public int ID { get; set;}   public int fIEld1 { get; set; }     public overrIDe bool Equals(object other) //note parameter is of type object   {                Test t = other as Test;        return (t != null) ? ID.Equals(t.ID) : false;   }   public overrIDe int GetHashCode()   {        return ID.GetHashCode();   }}

现在,联盟将会调用您重写的Equals和GetHashCode方法.当你覆盖Equals方法时,你也应该用ALWAYS来覆盖GetHashCode.

总结

以上是内存溢出为你收集整理的c# – 在LINQ中使用Union合并列表时删除重复项全部内容,希望文章能够帮你解决c# – 在LINQ中使用Union合并列表时删除重复项所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1237467.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存