2009-01-04 31 views
12

Si tengo un objeto complejo, ¿cuál es el patrón de mejores prácticas para escribir código para comparar 2 instancias para ver si son las mismasComparando dos objetos.

Respuesta

15

Implemente la interfaz IEquatable. Esto define un método generalizado que implementa un tipo o clase de valor para crear un método específico de tipo para determinar la igualdad de instancias. No olvides anular Equals (object) también. Más información aquí:

http://msdn.microsoft.com/en-us/library/ms131187.aspx

+0

cómo es esto diferente de IComparable – leora

+0

IEtable solamente le dirá si son iguales o no. IComparable te dará un pedido relativo. Para objetos que no están ordenados, pero son equivalentes (imágenes, por ejemplo) no puede usar IComparable. – tvanfosson

+0

es .Equals() lo mismo que == ?? – leora

2

creo que la respuesta es altamente dependiente del problema. Por ejemplo, es posible que desee considerar los objetos iguales solo si todas sus propiedades son equivalentes. Este sería quizás el caso donde cada objeto no tiene una propiedad de identificación única. Si existe dicha propiedad (o propiedades), por ejemplo, una ID o ID y Versión, que identifique de manera única cada objeto del tipo, entonces es posible que solo desee comparar en función de esa propiedad (o propiedades).

El patrón de base, sin embargo, debería ser algo así como:

if their references are equal (includes both null) 
    return true 
else if one object is null 
    return false 
else 
    return value based on relevant properties 

Tenga en cuenta que si se anula el operador de igualdad, también desea reemplazar GetHashCode() para que los códigos hash para objetos equivalentes son lo mismo. Esto asegurará que las estructuras de datos que usan el código hash para determinar claves duplicadas funcionen correctamente cuando el objeto se utiliza como clave.

0

Como mencionó un objeto complejo, asegúrese de que todos los objetos compuestos en el objeto complejo implementen igual (objeto) como lo menciona tvanfosson. Finalmente implemente iguales en el objeto Complex aprovechando los iguales de todos los Objetos compuestos

+0

Implemente o invalide ? –