tengo una clase que es IComparable
:¿Cómo compara HashSet elementos para la igualdad?
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);
}
}
Cuando agrego una lista de objetos de esta clase a un conjunto de hash:
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);
todo está bien y ha.count
es 2
, pero:
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));
Ahora ha.count
es 3
.
- Por qué no
HashSet
respectoa
'sCompareTo
método. - ¿Es
HashSet
la mejor manera de tener una lista de objetos únicos?
Añadir una implementación de '' IEqualityComparer en el constructor o implementan en la clase 'a'. https://msdn.microsoft.com/en-us/library/bb301504(v=vs.110).aspx –
Jaider