在两个列表上使用union不能按预期工作

Uma*_*ker 1 c# linq c#-4.0

我已经阅读了大约30篇关于这个主题的帖子,并且认为我按照你的指示写了这封信.

这是我正在使用的课程:

public class UserID
{
    public int user_id { get; set; }
    public bool exists { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我创建了两个好的列表.

List<UserID> List1 = new List<UserID>();
List<UserID> List2 = new List<UserID>();
Run Code Online (Sandbox Code Playgroud)

我已成功填充两个列表.

我正在尝试获取唯一用户ID的列表.我找到了列表的联合方法并给了它一个镜头.

List<UserID> ResultList = new List<UserID>();

ResultList = List1.Union(List2).ToList();
Run Code Online (Sandbox Code Playgroud)

这是问题所在.在此处运行的最后一行之后,ResultList只是放在一起的两个列表.

List1有{10,20,30,40} List2有{10,30,40,50,60}

我期待工会给我:

ResultList = {10,20,30,40,50,60}

但相反,它给了我:

ResultList = {10,20,30,40,10,30,40,50,60}

我究竟做错了什么?我读过很多不同的帖子都说同样的话 - 基本上就是用法.我没有正确使用它吗?我没有得到任何错误,它只是没有给我我期待的联盟.

Sel*_*enç 7

问题是编译器不知道如何比较两个UserID对象.它使用默认的相等比较器,它通过引用比较你的对象.所以即使它们具有相同的,user_id它们也被视为不同,因为引用是不同的.

你需要告诉编译器基础上,以比较对象user_id,通过重写属性EqualsGetHashCode方法,在你的类或者实现的[ IEqualityComparer].1