这是我用来测试的代码,T_ZJ_PostTouch还有其他字段
List<T_ZJ_PostTouch> list = new List<T_ZJ_PostTouch> {
new T_ZJ_PostTouch{OrgCode="1"},
new T_ZJ_PostTouch{OrgCode="1"},
new T_ZJ_PostTouch{OrgCode="2"},
new T_ZJ_PostTouch{OrgCode="2"},
};
int count = list.Distinct().Count();//结果是4
int count1 = list.Distinct(new OrgCodeComparer()).Count();//结果是2
public class OrgCodeComparer : IEqualityComparer<T_ZJ_PostTouch>
{
public bool Equals(T_ZJ_PostTouch x, T_ZJ_PostTouch y)
{
if (x == null)
return y == null;
return x.OrgCode == y.OrgCode;
}
public int GetHashCode(T_ZJ_PostTouch obj)
{
if (obj == null)
return 0;
return obj.OrgCode.GetHashCode();
}
}
这很正常,因为你用Distinct()方法时,默认的Comparer是EqualityComparer<T_ZJ_PostTouch>.Default 这个comparer,对于大部分引用类型,比较的是引用。而你自己的 OrgCodeComparer比较的是OrgCode字段。
谢谢!