public class ClassA
{
public string Id {get;set;}
}
public class ClassAEqualityComparer : IEqualityComparer<ClassA>
{
public bool Equals(ClassA x, ClassA y)
{
return x.Id==y.Id;
}
public int GetHashCode(ClassA obj)
{
return obj.Id.GetHashCode();
}
}
var a1 = new ClassA() { Id = "1" };
var a2 = new ClassA() { Id = "1" };
# 直接使用
var comparer = new ClassAEqualityComparer();
if (comparer.Equals(a1, a2))
{
}
# 在 List 中使用
List<ClassA> lsta = new List<ClassA>();
lsta.Add(a1);
lsta.Add(a2);
var lstb = lsta.Distinct(comparer);
lstb.Dump();
# 在 HashSet 中使用
HashSet<ClassA> hs = new HashSet<ClassA>(comparer);
hs.Add(a1);
hs.Add(a2);
hs.Dump();
# 在 Dictionary 中使用
Dictionary<ClassA, string> dic = new Dictionary<ClassA, string>(comparer);
dic.Add(a1, "1");
dic.Add(a2, "2");
dic.Dump();