【发布时间】:2016-05-14 02:16:52
【问题描述】:
我正在尝试在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 方法的情况下工作?
谢谢
【问题讨论】:
-
你应该阅读this documentation page。
-
@Jon。我会。谢谢。