2010-07-13 10 views
8

Obtuve dos objetos de la misma clase y necesito compararlos campo por campo. El problema es que tienen cerca de cien campos y sería un gran trabajo escribirlo a mano.Compara dos objetos de la misma clase con toneladas de campos

¿Conoces alguna forma de hacerlo de la manera más fácil? Las reflexiones en Java podrían ser una solución, pero aun así me parece un truco. Y busco una solución C# después de todo.

+2

.NET también tiene reflejo =) –

+2

Algo como: http://stackoverflow.com/questions/986572/hows-to-quick-check-if-data-transfer-two-objects-have-equal-properties- in-c/986617 # 986617 que utiliza la reflexión, pero la compila para obtener el máximo rendimiento? –

+1

Otra pregunta relacionada, sugerida por Flakron Bytyqi: http://stackoverflow.com/questions/506096/comparing-object-properties-in-c –

Respuesta

4

dos ideas:

  1. Uso de reflexión (que está disponible en C#) y el tiempo de ejecución de un bucle sobre los campos de las clas compararlos. Si desea poder excluir ciertos campos, puede hacerlo creando una clase de atributo y marcando los campos que no desea comparar con ese atributo.

  2. Utilice la reflexión para recorrer los campos de la misma manera y generar el código de comparación requerido. De esta manera tendrá un código "real", pero no tendrá que escribirlo y mantenerlo usted mismo. Los atributos se pueden usar para ajustar el código de comparación generado.

1

Lo mejor es refactorizar su código, cientos de campos es muy fácil.

Si no puede porque es un código heredado, averigüe qué atributo los iguala.

+1

No hay dos opiniones acerca de que este código necesita refactorización, simplemente no tiene el Ahora es el momento de hacerlo más limpio ahora mismo. Y, por desgracia, todos los atributos tienen que ser iguales. – vlood

0

Si tiene suerte, identificará una o dos propiedades que son únicas para la instancia, especialmente si su clase representa una entidad de base de datos, y solo tendrá que comparar esas propiedades únicas.

0

Utilice la expresión regular buscar y reemplazar. Es molesto cuando tienes que agregar campos * (los eliminados te dan un error de compilación), pero obtienes el beneficio de tener un código compilado.

Realmente, sin embargo, considere dividir la clase. Si hay 100 campos, ¿pueden agruparse en clases de componentes? 100 miembros es un gran lío para tener que administrar.

Cuestiones relacionadas