我有一堂课是IComparable
:
public class a : IComparable
{
public int Id { get; set; }
public string Name { get; set; }
public a(int id)
{
this.Id = id;
}
public int CompareTo(object obj)
{
return this.Id.CompareTo(((a)obj).Id);
}
}
当我将此类的对象列表添加到哈希集时:
a a1 = new a(1);
a a2 = new a(2);
HashSet<a> ha = new HashSet<a>();
ha.add(a1);
ha.add(a2);
ha.add(a1);
一切都很好,ha.count
还是2
,但是:
a a1 = new a(1);
a a2 = new a(2);
HashSet<a> ha = new HashSet<a>();
ha.add(a1);
ha.add(a2);
ha.add(new a(1));
现在ha.count
是3
。
- 为什么不
HashSet
尊重a
的CompareTo
方法。 HashSet
拥有唯一对象列表的最佳方法是吗?
IEqualityComparer<T>
在构造函数中添加实现,或在类中实现a
。msdn.microsoft.com/zh-CN/library/bb301504(v=vs.110).aspx