测试方法:List<Jury> list = new List<Jury>();
Jury a = new Jury
{
UserId = 11,
UserName = "TT"
};
Jury b = new Jury
{
UserId = 11,
UserName = "TT"
};
list.Add(a);
list.Add(b);
var tt = list.Distinct(new JuryComparer());
自定义类: 裁判public class Jury
{
public int UserId { get; set; }
public string UserName { get; set; }
}
比较类:public class JuryComparer : IEqualityComparer<Jury>
{
public bool Equals(Jury x, Jury y)
{
return x.UserId.Equals(y.UserId);
}
public int GetHashCode(Jury obj)
{
return obj.GetHashCode();
}
}
因为它先使用 GetHashCode 做判断了.
public int GetHashCode(Jury obj)
{
return 0;
}
使用上面方法修正你的 GetHashCode 函数,事实上就是让 JuryComparer 的第一次比较永为真,这样你的 x.UserId.Equals(y.UserId) 就成为决定性因素了.