Pregunta

Vamos a decir que tengo una clase llamada MiClase.

En mi código que tengo dos instancias de miclase, miclase1 y miclase2. Todo en ellos es propiedades (públicos y privados) son idénticos.

Si intento agregar a ambos a un HashSet tendrá que añadir los dos o sólo uno? Si se añade a ambos y no quiero que, puedo overidde es igual en la definición y la miclase Hasset sabrán cómo usarlo?

¿Fue útil?

Solución

Respuesta corta, que depende de su objeto es igual método.

Respuesta larga:

HashSet utilizará un IEqualityComparer para determinar si dos objetos son iguales. Si usted no proporciona un usará EqualityComparer.Default; que en la práctica solo utiliza Object.equals (a, b), además de algunas cosas para evitar los tipos de valor de boxeo.

Verificación de la documentación para object.Equals(a, b):. Se efectuan realizando a.Equals(b) después de comprobar los valores nulos

La implementación predeterminada de object.Equals(other) es para comprobar la igualdad referencia solamente (es decir, que son la misma instancia exacta de un objeto) pero se puede anular este para llevar a cabo ninguna verificación de que te gusta, como la comprobación de si un campo ID es idéntico. Tenga en cuenta, al redefinir Equivale también hay que reemplazar GetHashCode.

Si desea cambiar la forma HashSet determina la igualdad sin alterar la definición del objeto que le puede proporcionar una costumbre IEqualityComparer lugar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top