首页 新闻 会员 周边

Linq distinct无效,选择出来的还是重复项

1
悬赏园豆:5 [已解决问题] 解决于 2010-08-11 17:52

 

测试方法:
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();
}
}

 

 

问题补充: 执行结果根本无法筛除UserId的重复项
吕飞的主页 吕飞 | 菜鸟二级 | 园豆:280
提问于:2010-08-11 17:01
< >
分享
最佳答案
0

因为它先使用 GetHashCode 做判断了.

 

        public int GetHashCode(Jury obj)
        {
            return 0;
        }


使用上面方法修正你的 GetHashCode 函数,事实上就是让 JuryComparer 的第一次比较永为真,这样你的 x.UserId.Equals(y.UserId) 就成为决定性因素了.

收获园豆:5
Launcher | 高人七级 |园豆:45045 | 2010-08-11 17:20
哦 ,my god 搞了一下午.郁闷,结果就是一句话搞定。谢谢咯
吕飞 | 园豆:280 (菜鸟二级) | 2010-08-11 17:28
public int GetHashCode(Jury obj) { return 0; } 使用上面方法修正你的 GetHashCode 函数,事实上就是让 JuryComparer 的第一次比较永为真,这样你的 x.UserId.Equals(y.UserId) 就成为决定性因素了.
Launcher | 园豆:45045 (高人七级) | 2010-08-11 17:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册