我正在尝试使用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 -------- 1
ID: 1 -------- 2
ID: 2 -------- 3
ID: 2 -------- 4
ID: 1 -------- 1
ID: 1 -------- 2
ID: 2 -------- 3
ID: 2 -------- 4
我原本以为Union
应该去除重复项并返回:ID: 1 -------- 1
ID: 1 -------- 2
ID: 2 -------- 3
ID: 2 -------- 4
我是在做错了什么还是理解错了?
此外,在Test
类中,是否应该不需要显式重写Equals
方法就可以正常工作?
谢谢